使用Flask处理REST子资源

时间:2015-08-06 09:18:34

标签: python rest flask

我正在创建一个休息应用程序,我有一个名为" 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"])

您认为哪一个更好,为什么?如果您认为两者都不好,有没有更好的方法来做到这一点?

谢谢。

0 个答案:

没有答案