将多个GET端点合并到一个资源中

时间:2018-08-22 12:45:36

标签: python flask-restful

我正在使用flask restful创建API,并且我想重构代码。我有如下所示的东西:

class Makequestions(Resource):
    def get(self):
    #somecode

class Managequestions(Resource):
    def get(self, user_id):
    #somecode

API.add_resource(MakeQuestions, '/MakeQuestions')
API.add_resource(ManageQuestions, '/ManageQuestions/<int:user_id>')

我需要将这两个资源合并为一个具有多个端点的资源,例如:

class Makequestions(Resource):
    def get(self):
    #somecode

    def get(self, user_id):
    #somecode

也许有一个最终网址,类似于

API.add_resource(MakeQuestions, '/MakeQuestions','/MakeQuestions/<int:user_id>')

我希望这将减少我必须创建“资源类”的次数。有什么办法可以做到吗?

2 个答案:

答案 0 :(得分:0)

我对Flask RESTful API并不十分熟悉,但是Python使您可以使用get(self)get(self, question_id)重载一个类,但是,如果您正在“制作” REST资源,那应该不是GET请求。

REST API URL不应包含诸如“ MakeObject”或“ ManageObject”之类的动词。 HTTP方法应指示正在执行的操作。

话虽这么说,POST /question会成为一个问题对象。 GET /question/:id应该返回一个特定的值。

因此,您将在单个post(self)资源下定义get(self, question_id)Question。或也添加一个Questions资源,您可以在其中获得所有问题,然后在其中移动post方法。

如果将“问题”替换为“待办事项”,则您的问题与full example on the Flask RESTful site没什么不同

注意:复数URL比单数URL更受欢迎,因此在您的情况下,/questions/questions/:id应该定义为两个资源

答案 1 :(得分:0)

除了命名功能之外,您还可以做类似

的操作
class Question(Resource):
    def get(self, user_id=0):
        if(user_id):
            return specific question
        return list of questions