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

2024-09-29 22:37:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用flaskrestful创建一个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>')

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

^{pr2}$

也许有一个最后的网址

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

我希望这能减少创建一个“资源类”的次数,有什么方法可以做到吗?在


Tags: selfaddapiidgetdef资源resource
2条回答

撇开函数的命名不谈,你可以做一些类似的事情

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

我对Flask restfulapi不是很熟悉,但是Python允许您用get(self)和{}重载一个类,但是如果您要“生成”一个REST资源,那么这不应该是GET请求。在

restapi url不应包含诸如“MakeObject”或“ManageObject”之类的动词。HTTP方法应该指定要执行的操作。在

也就是说,POST /question会成为一个问句对象。GET /question/:id应该返回一个特定的值。在

因此,您需要在单个Question资源下定义post(self)和{}。或者添加一个Questions资源,在那里可以得到所有问题,并将post方法移到那里。在

如果用“TODO”替换“Question”,那么您的问题与full example on the Flask RESTful site没有什么不同

注意:复数URL也优于单数URL,因此在您的例子中,/questions和{}应该定义为两个资源

相关问题 更多 >

    热门问题