[Python] Flask RESTful API複数のエンドポイントと複雑なエンドポイント


Answers

Question

私のFlask-RESTful APIでは、2つのオブジェクト、ユーザー、都市があるとします。 それは1対多の関係です。 APIを作成してリソースを追加すると、非常に簡単で一般的なURLがマップされます。 ここにコードがあります(無用なものは含まれていません)。

class UserAPI(Resource):  #The API class that handles a single user
  def __init__(self):
    #Initialize

  def get(self, id):
    #GET requests

  def put(self, id):
    #PUT requests

  def delete(self, id):
    #DELETE requests

class UserListAPI(Resource):  #The API class that handles the whole group of Users
  def __init__(self):

  def get(self):

  def post(self):

api.add_resource(UserAPI, '/api/user/<int:id>', endpoint = 'user')
api.add_resource(UserListAPI, '/api/users/', endpoint = 'users')

class CityAPI(Resource):
  def __init__(self):

  def get(self, id):

  def put(self, id):

  def delete(self, id):

class CityListAPI(Resource):
  def __init__(self):

  def get(self):

  def post(self):

api.add_resource(CityListAPI, '/api/cities/', endpoint = 'cities')
api.add_resource(CityAPI, '/api/city/<int:id>', endpoint = 'city')

ご覧のとおり、私は非常に基本的な機能を実装したいすべてのことを行うことができます。 私は両方のオブジェクトを取得、投稿、配置、および削除できます。 しかし、私の目標は二つあります:

(1)都市IDの代わりに都市名のような他のパラメータを要求できるようにする。 それは次のようになります:
api.add_resource(CityAPI, '/api/city/<string:name>', endpoint = 'city')
それは私にこのエラーがスローされないことを除いて:

AssertionError:ビュー関数のマッピングが既存のエンドポイント関数を上書きしています

(2)リクエスト内で2つのリソースを結合できること。 すべてのユーザーをいくつかの都市に関連付けるようにしたいとします。 REST URLでは、次のようになります。
/api/cities/<int:id>/users

どのように私はフラスコでそれを行うのですか? どのエンドポイントにマップするのですか?

基本的には、私のAPIを基本から使用可能にする方法を探しています。 任意のアイデアやアドバイスありがとう




Links