具有多个请求但只有一些需要参数的资源

时间:2020-06-19 10:28:12

标签: python-3.x rest flask flask-restful

我是Flask和Flask-RESTful的新手。我想为待办事项编写一个API。在/todos,我想定义一个GET和一个POST请求,其中后者需要一个包含实际待办事项作为参数的字符串。 我对单个请求和必需的参数没有问题:

from flask import Flask
from flask_restful import Resource, Api, reqparse

app = Flask(__name__)
api = Api(app)

todos = {1: "test"}

class Todos(Resource):

    def get(self):
        if len( todos ) > 0:
            return json.dumps( todos )
        else:
            return "No todo found", 204

class GetTodo(Resource):

    parser = reqparse.RequestParser()
    parser.add_argument("todoId", required=True, type=int, help="ID cannot be converted")

    def get(self ):
        args = GetTodo.parser.parse_args()
        todoId = args["todoId"]

        if todoId in todos:
            return todos[todoId], 200
        else:
            return "Todo nicht gefunden", 404

api.add_resource(Todos, '/todos')
api.add_resource(GetTodo, "/todos/showtodo")

if __name__ == '__main__':
    app.run()

我还有一个PostTodo课:

class PostTodo(Resource):
    parser = reqparse.RequestParser()
    parser.add_argument("todo", required=True, type=str, help="Please specify the todo")
    def post(self):
        args = PostTodo.parser.parse_args()
        todo = args["todo"]

        id = len(todos) + 1
        todos.update( { id : todo } )

要添加POST方法,我看到了两个可能性:

  1. 在现有端点“ / todos”处将PostTodo类添加为另一个资源类。
  2. 将PostTodo类的内容添加到Todos类中,以在同一资源中获得另一种请求类型。

哪个更好?我得到了第一个可行的方法,但是认为将两个资源添加到同一端点不是很干净。对于第二种方式,我不知道如何根据需要设置POST所需的参数,而不是GET。

0 个答案:

没有答案