Code前端首页关于Code前端联系我们

什么是RESTful?django怎么实现API设计开发?

terry 2年前 (2023-09-24) 阅读数 53 #后端开发
什么是宁静? django是如何实现API设计和开发的? ?纵观整个网络,它通过URL来标识分布在特定网络节点的资源。客户端应用程序通过 URL 获取资源表示。获取这些表示会导致这些应用程序改变状态
  • REST 与技术无关,代表一种软件架构风格,REST 代表表述性状态转移。中文翻译为“代表性状态转移”
  • 所有的数据,无论是通过网络获取还是操作(增、删、改、查),现在是、也将是资源。 REST 区别于其他架构风格的最基本属性是所有数据都被视为资源。对于REST面向资源的架构风格,有人提出了一个新的结构概念,具体为:面向资源的架构(ROA)
  • 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
      • 方法
    • :从服务器上删除资源(一项或多项)

    • POST:在服务器上创建新资源
    • PUT:更新服务器上的资源(客户端提供完整的更改
    • PATCH:更新服务器上的资源(客户端提供更改的属性)
    • DELETE:从服务器删除资源
  • 过滤,以 url 中上传参数的形式传递搜索条件
    • 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:输入过滤条件
  • 状态code什么是RESTful?django怎么实现API设计开发?
    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 密钥”}
    • 返回结果。对于各种操作,服务器返回给用户的结果应符合以下规范。
      • 123456GET /集合:返回资源对象的列表(数组) 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的路由系统:

        123urlpatterns = ❃❙‶ '^用户' , Users.as_view() ),]

        CBV 视图:

        1234567891011121314151617z django .views z django .http 导入 JsonResponse !! 浏览次数:❙ def.获取(自我,请求,* 参数,**kwargs❙❙'❙'参数= {       '状态'正确❃♃                    :: '数据'响应'      }   }   返回JsonResponse(结果,状态=)defp(Já,请求, ❙♷ ‷ *Kwargs): 结果 = {                                                 '数据' '响应数据'❃  ※‷‶' return JsonResponse(result, status‶== . 基于 Django Rest Framework 实现

        1. 基本流程

        网址.py

        123456z django.conf.urls 导入❙❙‼️z web .view.s 1_api 导入TestViewurlpatterns❀‸=❀‸[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什么是RESTful?django怎么实现API设计开发? urls.py什么是RESTful?django怎么实现API设计开发?views.py

        b。标头验证请求什么是RESTful?django怎么实现API设计开发? urls.py什么是RESTful?django怎么实现API设计开发? 视图 .py

        c. 多种身份验证规则..‼ url 视图d. 身份验证和权限 urls.py什么是RESTful?django怎么实现API设计开发?views.py

        e. 全局使用

        以上操作都是针对各个视图的特殊配置,如果要配置全局配置,必须写在配置文件中。什么是RESTful?django怎么实现API设计开发?settings.py什么是RESTful?django怎么实现API设计开发?urls.py什么是RESTful?django怎么实现API设计开发?views.py

        3.用户访问数量/频率限制

        a.根据 IP什么是RESTful?django怎么实现API设计开发? 用户 URL 限制访问频率 .py什么是RESTful?django怎么实现API设计开发? 视图 .py

        b。根据用户IP显示访问频率(有助于Django缓存)什么是RESTful?django怎么实现API设计开发?settings.py什么是RESTful?django怎么实现API设计开发?urls.py什么是RESTful?django怎么实现API设计开发?views.py

        c。在视图设置中限制请求的频率什么是RESTful?django怎么实现API设计开发?.py什么是RESTful?django怎么实现API设计开发?urls.py什么是RESTful?django怎么实现API设计开发?views.py

        d。匿名时使用 IP 限制 + 登录时令牌限制 什么是RESTful?django怎么实现API设计开发? settings.py什么是RESTful?django怎么实现API设计开发? urls.py views.py 2 2 ❙– url。 。基于Accept请求头方法

        例如:Accept: application/json;版本=1.0什么是RESTful?django怎么实现API设计开发?settings.py什么是RESTful?django怎么实现API设计开发?urls.py什么是RESTful?django怎么实现API设计开发?views.py

        d。基于主机名的方法

        如:v1.example.com什么是RESTful?django怎么实现API设计开发?settings.py什么是RESTful?django怎么实现API设计开发?urls.py什么是RESTful?django怎么实现API设计开发?views.py基于django路由系统的命名空间

        这样如:示例.com/v1/users /什么是RESTful?django怎么实现API设计开发?settings.py什么是RESTful?django怎么实现API设计开发? urls.py❙display.py❓❓全局使用什么是RESTful?django怎么实现API设计开发?settings.py

        5.分析器(analyzer)

        根据请求头的内容类型选择对应的分析器处理请求体的内容。2 个表单 urlencoded 请求正文 什么是RESTful?django怎么实现API设计开发? urls.py什么是RESTful?django怎么实现API设计开发?views.py

        c。仅处理请求标头为内容类型 multipart/form-data 什么是RESTful?django怎么实现API设计开发? urls.py什么是RESTful?django怎么实现API设计开发? display s.py什么是RESTful?django怎么实现API设计开发? upload.html

        d 的请求正文。仅上传文件什么是RESTful?django怎么实现API设计开发? urls.py什么是RESTful?django怎么实现API设计开发?views.py什么是RESTful?django怎么实现API设计开发?upload.html

        e。多个解析器同时使用 ser

        当使用多个解析器时,其余的自动根据请求头的 content-type 进行比较,并使用对应的解析器什么是RESTful?django怎么实现API设计开发? urls.py什么是RESTful?django怎么实现API设计开发?views.py♿views .py♿♸f。全局使用 什么是RESTful?django怎么实现API设计开发?settings.py什么是RESTful?django怎么实现API设计开发?urls.py什么是RESTful?django怎么实现API设计开发?views.py

        注:个别特殊值可以通过请求Django对象.♶❝re来获取。序列化

        序列化用于验证和验证用户请求数据。数据是序列化的。

        a。自定义字段什么是RESTful?django怎么实现API设计开发? urls.py什么是RESTful?django怎么实现API设计开发?views.py

        b。根据Model什么是RESTful?django怎么实现API设计开发? urls.py什么是RESTful?django怎么实现API设计开发?视图.py

        c自动生成字段。生成 URL什么是RESTful?django怎么实现API设计开发? urls.py什么是RESTful?django怎么实现API设计开发?views.py

        d。自动生成URL什么是RESTful?django怎么实现API设计开发? urls.py什么是RESTful?django怎么实现API设计开发?views.py

        7.寻呼

        a。按页码分页什么是RESTful?django怎么实现API设计开发? urs .py什么是RESTful?django怎么实现API设计开发?views.py

        b。按位置和编号分页什么是RESTful?django怎么实现API设计开发? urls.py什么是RESTful?django怎么实现API设计开发?views.py

        c.光标分页什么是RESTful?django怎么实现API设计开发?urls.py什么是RESTful?django怎么实现API设计开发?views.py

        8.路由系统

        a。自定义路由什么是RESTful?django怎么实现API设计开发? urls.py什么是RESTful?django怎么实现API设计开发?views.py

        b。半自动路由 什么是RESTful?django怎么实现API设计开发? urls.py 什么是RESTful?django怎么实现API设计开发?views.py

        c 。全自动路由什么是RESTful?django怎么实现API设计开发? urls.py什么是RESTful?django怎么实现API设计开发?views.py

        9. 视图

        a。 GenericViewSet什么是RESTful?django怎么实现API设计开发? urls.py什么是RESTful?django怎么实现API设计开发?views.py

        b。 ModelViewSet(自定义 URL)什么是RESTful?django怎么实现API设计开发? urls.py什么是RESTful?django怎么实现API设计开发?views.py

        c。 ModelViewSet(路由框架的其余部分)什么是RESTful?django怎么实现API设计开发? urls.py什么是RESTful?django怎么实现API设计开发?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/
        什么是RESTful?django怎么实现API设计开发? urls.py什么是RESTful?django怎么实现API设计开发?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/
        什么是RESTful?django怎么实现API设计开发?views.py

        c. .0.1:8000/test/?format=form

      • http://127.0.0.1:8000/test.form
      • http://127.0.0.1:8000/test/
      • 什么是RESTful?django怎么实现API设计开发?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/
        什么是RESTful?django怎么实现API设计开发? urls.py什么是RESTful?django怎么实现API设计开发?views.py什么是RESTful?django怎么实现API设计开发?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/
        什么是RESTful?django怎么实现API设计开发?views.py

        注意:如果同时存在多个渲染器,将根据 URL 扩展名自动选择渲染器。

    版权声明

    本文仅代表作者观点,不代表Code前端网立场。
    本文系作者Code前端网发表,如需转载,请注明页面地址。

    发表评论:

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

    热门