什么是RESTful?django怎么实现API设计开发?
2。 RESTful API 设计
- API 与用户之间的通信协议始终使用 HTTPs 协议。
- DomainName
- https://api.example.com 尝试将API部署在专用域名中(多个域会有问题)。 。 /https:// https:// EX 非常简单 版本 URL,例如:https://api.example.com/v1/ 资源的标题和所有名词的使用代表(可能是复数)
- https://api.example.com/v1/zoo
- https://api.example.com/v1/animals
- https://api.example.com/ v1/employees
- 方法
- https://api.example.com 尝试将API部署在专用域名中(多个域会有问题)。 。 /https:// https:// EX 非常简单 版本 URL,例如:https://api.example.com/v1/ 资源的标题和所有名词的使用代表(可能是复数)
:从服务器上删除资源(一项或多项)
- POST:在服务器上创建新资源
- PUT:更新服务器上的资源(客户端提供完整的更改
- PATCH:更新服务器上的资源(客户端提供更改的属性)
- DELETE:从服务器删除资源
- https:// api.example .com/ v1/zoos?limit=10:输入返回的记录数
- https://api.example.com/v1/zoos?offset=10:输入起始记录数返回记录的位置
- https://api.example.com /v1/zoos?page=2&per_page=100:输入页码和每页记录数
- https://api.example.com/v1 /zoos?sortby=name&order = asc:指定返回结果按哪个属性排序,以及排序顺序
- https://api.example.com/v1/zoos?animal_type_id=1:输入过滤条件

200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。 201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。 202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务) 204 NO CONTENT - [DELETE]:用户删除数据成功。 400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。 401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。 403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。 404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。 406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。 410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。 500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。 更多看这里:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
错误处理、状态 当code为4xx时,需要返回错误信息,以error为key。
123 | { 错误: “无效的 API 密钥” } |
- 返回结果。对于各种操作,服务器返回给用户的结果应符合以下规范。
123456 GET
/
集合:返回资源对象的列表(数组)
GET
/❙/❙❙/资源集合:返回一个资源对象 邮报
/
集合:返回新生成的源对象
PUT
/
返回集合完整源♻❙
PATCH
/
收藏
/
source:返回完整的源对象
DELETE
/❙❙集合源:返回空文档
- Hypermedia API,RESTful API 最好实现 Hypermedia,即提供返回结果中引用了其他API方法,以便用户无需查看文档就知道下一步该做什么。
123456 {
"链接"
: {
"rel"
: os".www.sk ,
“参考”
:
"https://api.example.com/zoos"
,❙,❙"❙"♸ :
"动物园列表"
,
“类型”
:
“application/vnd.your format+json”❙}‶‶‶
123 摘自:http://www.ruany凤凰。 com/blog/2014/05/restful_api.html
3.实现
基于Django的路由系统:
123 urlpatterns
=
❃❙‶'^用户'
, Users.as_view() ),
]
CBV 视图:
1234567891011121314151617 z
django .viewsz
django .http
导入
JsonResponse!! 浏览次数:❙ def.获取(
自我
,请求,
*
参数,
*
*
kwargs❙❙'❙'参数=
{
'状态'
:
正确❃♃ :
:
: '数据'响应'
} } 返回
JsonResponse(结果,状态
=
)defp(Já,请求, ❙♷ ‷ *Kwargs): 结果 =
{'数据'
:
'响应数据'❃ ※‷‶' return JsonResponse(result, status
‶== . 基于 Django Rest Framework 实现
1. 基本流程
网址.py
123456 z
django.conf.urls
导入❙❙‼️
z
web .view.s 1_api
导入
TestView
urlpatterns❀‸=❀‸[
url(r
'^测试/'
, TestView.as_view()),
]
]views.py ️ ♻※♻
测试视图(APIView):
def
调度(self
,请求,参数,
) ♻*):*❙♻♻*‷‷‷‷
"""
请求到达后,发送的方法,发送方法根据不同的请求方式触发get/post/put等方法
注:APIView中的send方法有很多很多功能""›
返回
超级
().发送(请求,
*
**♻* kwargs)
def
得到(
自己
,请求,
*
❙❙*❀* ❀* kwargs):
,请求,
* .
响应(
'GET请求,响应内容'
)
–❙ ––– 帖子(
我是请求
插入(
self
,请求,
*♻♻*args, ♻** kwargs):
return
Response(
'PUT请求,响应内容'
)
上面是rest框架的基本流程,重要的函数在APIView发送时触发
2。身份验证和授权
a。用户传递的令牌身份验证 url
urls.py
views.py
b。标头验证请求
urls.py
视图 .py
c. 多种身份验证规则..‼ url 视图d. 身份验证和权限 urls.py
views.py
e. 全局使用
以上操作都是针对各个视图的特殊配置,如果要配置全局配置,必须写在配置文件中。
settings.py
urls.py
views.py
3.用户访问数量/频率限制
a.根据 IP
用户 URL 限制访问频率 .py
视图 .py
b。根据用户IP显示访问频率(有助于Django缓存)
settings.py
urls.py
views.py
c。在视图设置中限制请求的频率
.py
urls.py
views.py
d。匿名时使用 IP 限制 + 登录时令牌限制
settings.py
urls.py views.py 2 2 ❙– url。 。基于Accept请求头方法
例如:Accept: application/json;版本=1.0
settings.py
urls.py
views.py
d。基于主机名的方法
如:v1.example.com
settings.py
urls.py
views.py基于django路由系统的命名空间
这样如:示例.com/v1/users /
settings.py
urls.py❙display.py❓❓全局使用
settings.py
5.分析器(analyzer)
根据请求头的内容类型选择对应的分析器处理请求体的内容。2 个表单 urlencoded 请求正文
urls.py
views.py
c。仅处理请求标头为内容类型 multipart/form-data
urls.py
display s.py
upload.html
d 的请求正文。仅上传文件
urls.py
views.py
upload.html
e。多个解析器同时使用 ser
当使用多个解析器时,其余的自动根据请求头的 content-type 进行比较,并使用对应的解析器
urls.py
views.py♿views .py♿♸f。全局使用
settings.py
urls.py
views.py
注:个别特殊值可以通过请求Django对象.♶❝re来获取。序列化
序列化用于验证和验证用户请求数据。数据是序列化的。
a。自定义字段
urls.py
views.py
b。根据Model
urls.py
视图.py
c自动生成字段。生成 URL
urls.py
views.py
d。自动生成URL
urls.py
views.py
7.寻呼
a。按页码分页
urs .py
views.py
b。按位置和编号分页
urls.py
views.py
c.光标分页
urls.py
views.py
8.路由系统
a。自定义路由
urls.py
views.py
b。半自动路由
urls.py
views.py
c 。全自动路由
urls.py
views.py
9. 视图
a。 GenericViewSet
urls.py
views.py
b。 ModelViewSet(自定义 URL)
urls.py
views.py
c。 ModelViewSet(路由框架的其余部分)
urls.py
views.py
10。渲染器
根据用户请求的URL或者用户可接受的类型,过滤出相关的渲染组件。
用户请求 URL:- http://127.0.0.1:8000/test/?format=json
- http://127.0.0.1:8000/test.json♶ ser 请求头 接受:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
a。 json
访问网址:
- http://127.0.0.1:8000/test/?format=json
- http://127.0.0.1:8000/27.0.0.1:8000/test/
urls.py
views.py
b。表单
访问网址:
- http://127.0.0.1:8000/test/?format=admin
- http://127.0 .0.1:8000/test.admin://1. .0.1:8000/test/
views.py
c. .0.1:8000/test/?format=form
- http://127.0.0.1:8000/test.form
- http://127.0.0.1:8000/test/
views.py d.自定义显示模板
访问网址:
- http://127.0.0.1:8000/test/?format=html
- http://127.0.0.1:8000/test.html:http:// 127.0.0.1:8000/test.html /127.0.0.1:8000/test/
urls.py
views.py
userdetail.html API+JSON浏览器格式
访问网址:
- http://127.0.0.1:8000/test/?format=api
- http://127.0.0.1:8000/test://127.0.0.1 :8000/测试/?0.1:8000/test/
views.py
注意:如果同时存在多个渲染器,将根据 URL 扩展名自动选择渲染器。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。