我正在创建一个休息应用程序,我有一个名为" job"它有一组固定的子资源:
http://domain.com/api/job/1/
http://domain.com/api/job/1/phase
http://domain.com/api/job/1/owner
我目前正在使用Flask的MethodView创建我的REST API。但我无法确定哪种方法可以进行映射。我应该为每个子资源使用一个单独的类,如下所示:
class ApiJob(MethodView):
def get(self, job_id):
pass
class ApiJobPhase(MethodVIew):
def get(self, job_id):
pass
class ApiJobOwner(MethodView):
def get(self, job_id):
pass
app.add_url_rule("/jobs/<int:job_id>", view_func=ApiJob.as_view("job"), methods=["GET"])
app.add_url_rule("/jobs/<int:job_id>/phase", view_func=ApiJobPhase.as_view("phase"), methods=["GET"])
app.add_url_rule("/jobs/<int:job_id>/owner", view_func=ApiJobOwner.as_view("owner"), methods=["GET"])
或者我应该通过Job类处理所有子资源,如下所示:
class ApiJob(MethodView):
def get(self, job_id, res_id):
if(res_id == None):
# deal with the "job" resource
elif(res_id == "phase"):
# deal with the "phase" sub-resource
elif(res_id == "owner"):
# deal with the "owner" sub-resource
else:
# unknown subresource return some HTTP error code
apl.add_url_rule("/jobs/<int:job_id>/", view_func=ApiJob.as_view("job"), defaults={"res_id": None}, methods=["GET"])
api.add_url_rule("/jobs/<int:job_id>/<string:res_id>", view_func=ApiJob.as_view("jobres"), methods=["GET"])
您认为哪一个更好,为什么?如果您认为两者都不好,有没有更好的方法来做到这一点?
谢谢。