首页 > 解决方案 > 使用 Flask 创建端点参数的约定?

问题描述

我的 REST API 知识不是最新的。当我们在实现 REST API 时应用过滤器或排序时,我知道我们曾经像下面这样放置?&到端点:

/actors?attr={attr_value} Example: /actors?name=”Bob”

Filters out all actors that don’t have “Bob” in their name (Should allow for similar filtering for any other attribute)

但是,当我看到 Flask 示例时,我从未见过有人将这些参数添加到端点,例如

@app.route("/api/v1/actors?gender=<gender>", methods = ['GET'])
    def get_player(gender):
        ....

使用 Flask 实现 REST API 时应用过滤器或排序的正确方法是什么?

标签: restflask

解决方案


对于简单的GET请求,有一些方法可以传递查询参数:

  1. 作为路径参数
  2. 作为查询参数

GET带有正文的请求是可能的,但大多被认为是不好的做法。

以下示例提供了两个端点,每个端点都有一个示例。

import json
import flask
from flask import Flask
from flask import request

app = Flask(__name__)


# GET http://0.0.0.0:5000/api/v1/actors?gender=male
@app.route("/api/v1/actors", methods = ['GET'])
def get_players():
    if request.args['gender'] == 'male':
        return json.dumps([{ 'id': 23, 'gender': 'male' }], indent=2)
    else:
        return json.dumps([])


# GET http://0.0.0.0:5000/api/v1/actors/john/
@app.route("/api/v1/actors/<actor_id>/", methods = ['GET'])
def get_player_by_id(actor_id):
    return json.dumps({ 'id': actor_id, 'gender': 'male' }, indent=2)


app.run()

我不打算在这里解释 REST,但返回值和端点结构应该给你一个想法。


推荐阅读