6
だけhttp://flask.pocoo.org/docs/views/フラスコ - ネストされた残りのAPI - メソッドビュー以外のものを使用するか、または悪い設計をしましたか?
に沿って、以下、フラスコをオフに始まるが、私は、症状のため、この場合には、基本的なREST APIを持って言う:
/
GET - list
POST - create
/<symptomid>
GET - detail
PUT - replace
PATCH - patch
DELETE - delete
次のように私はフラスコのMethodView
でかなりきれいにこれを実装することができます
from flask import Blueprint, request, g
from flask.views import MethodView
#...
mod = Blueprint('api', __name__, url_prefix='/api')
class SymptomAPI(MethodView):
""" ... """
url = "/symptoms/"
def get(self, uid):
if uid is None:
return self.list()
else:
return self.detail(uid)
def list(self):
# ...
def post(self):
# ...
def detail(self, uid):
# ...
def put(self, uid):
# ...
def patch(self, uid):
# ...
def delete(self, uid):
# ...
@classmethod
def register(cls, mod):
symfunc = cls.as_view("symptom_api")
mod.add_url_rule(cls.url, defaults={"uid": None}, view_func=symfunc,
methods=["GET"])
mod.add_url_rule(cls.url, view_func=symfunc, methods=["POST"])
mod.add_url_rule('%s<int:uid>' % cls.url, view_func=symfunc,
methods=['GET', 'PUT', 'PATCH', 'DELETE'])
SymptomAPI.register(mod)
しかし、のは、私はこれらの個々の症状に別のAPIを添付したいとしましょう:
/<symptomid>/diagnoses/
GET - list diags for symptom
POST - {id: diagid} - create relation with diagnosis
/<symptomid>/diagnoses/<diagnosisid>
GET - probability symptom given diag
PUT - update probability of symptom given diag
DELETE - remove diag - symptom relation
私は、上記の2つの代わりに4つのGETを持っています。
- これは悪いapiデザインと思いますか?
MethodView
はこのデザインに適していますか? (デザインが悪くない場合)- これらのルートはどのように実装しますか?
だから...私はまともな解決策を見つけました。私がここにいる限り、私は質問と私の解決策を投稿するかもしれません。どんなフィードバックも依然として非常に高く評価されます。