栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Flask RESTful API多个复杂端点

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Flask RESTful API多个复杂端点

您犯了两个错误。

首先,Flask-RESTful使您认为资源是通过单个URL实施的。实际上,您可以有许多不同的URL返回相同类型的资源。在Flask-
RESTful中,您将需要

Resource
为每个URL创建一个不同的子类,但是从概念上讲,这些URL属于同一资源。请注意,实际上,您已经为每个资源创建了两个实例来处理列表和单个请求。

您犯的第二个错误是您希望客户端知道您的API中的所有URL。这不是构建API的好方法,理想情况下,客户端仅知道一些顶级URL,然后从顶级响应中的数据中发现其余URL。

在您的API中,您可能希望将

/api/users
/api/cities
作为顶级API公开。各个城市和用户的URL将包含在响应中。例如,如果我调用
http://example.com/api/users
以获取用户列表,则可能会收到以下响应:

{    "users": [         { "url": "http://example.com/api/user/1", "name": "John Smith", "city": "http://example.com/api/city/35"        },        { "url": "http://example.com/api/user/2", "name": "Susan Jones", "city": "http://example.com/api/city/2"        }    ]}

请注意,用户的JSON表示包括该用户的URL以及城市的URL。客户不需要知道如何构建它们,因为它们已经被赋予了它。

按名称获取城市

对于一个城市的网址

/api/city/<id>
,并且网址以获得城市的完整列表
/api/cities
,因为你拥有它定义。

如果您还需要按城市名称搜索城市,则可以扩展“城市”端点来进行。例如,您可以使用表格中的URL

/api/cities/<name>
返回与指定为的搜索字词匹配的城市列表
<name>

使用Flask-RESTful,您将需要为此定义一个新的

Resource
子类,例如:

    class CitiesByNameAPI(Resource):        def __init__(self): # ... def get(self, name): # ...    api.add_resource(CitiesByNameAPI, '/api/cities/<name>', endpoint = 'cities_by_name')

获取属于一个城市的所有用户

当客户要求一个城市时,它应该得到一个包含URL的响应,以吸引该城市的用户。例如,假设从

/api/users
上面的响应中我想了解第一个用户所在的城市。因此,现在我向发送请求
http://example/api/city/35
,并返回以下JSON响应:

{    "url": "http://example.com/api/city/35",    "name": "San Francisco",    "users": "http://example/com/api/city/35/users"}

现在我有了城市,这给了我一个URL,我可以使用它来获取该城市中的所有用户。

请注意,您的URL丑陋或难以构建都没关系,因为客户端永远不需要从头开始构建大多数URL,只需从服务器获取它们即可。这也使您将来可以更改URL的格式。

要实现按城市吸引用户的URL,您需要添加另一个

Resource
子类:

    class UsersByCityAPI(Resource):        def __init__(self): # ... def get(self, id): # ...    api.add_resource(UsersByCityAPI, '/api/cities/<int:id>/users', endpoint = 'users_by_city')

我希望这有帮助!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/647170.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号