RESTful API 设计指南

这篇具有很好参考价值的文章主要介绍了RESTful API 设计指南。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

RESTful API 是目前比较成熟的一套互联网应用程序的API设计理论

一、协议

API与用户的通信协议,总是使用HTTPs协议。 应用层协议

二、域名

应该尽量将API部署在专用域名之下。并SSL 加密


https://api.example.com

三、版本(Versioning)

应该将API的版本号放入URL。


https://api.example.com/v1/

 另一种做法是,将版本号放在HTTP头信息中,但不如放入URL方便和直观。Github采用这种做法。

四、路径(Endpoint)

路径又称"终点"(endpoint),表示API的具体网址。 见名知意

在RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词,而且所用的名词往往与数据库的表格名对应。一般来说,数据库中的表都是同种记录的"集合"(collection),所以API中的名词也应该使用复数。

举例来说,有一个API提供动物园(zoo)的信息,还包括各种动物和雇员的信息,则它的路径应该设计成下面这样。

  • https://api.example.com/v1/zoos
  • https://api.example.com/v1/animals
  • https://api.example.com/v1/employees

 

五、HTTP动词

对于资源的具体操作类型,由HTTP动词表示。

常用的HTTP动词有下面五个(括号里是对应的SQL命令)。

  • GET(SELECT):从服务器取出资源(一项或多项)。
  • POST(CREATE):在服务器新建一个资源。
  • PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
  • PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
  • DELETE(DELETE):从服务器删除资源。

下面是一些例子。

  • GET /zoos:列出所有动物园
  • POST /zoos:新建一个动物园
  • GET /zoos/ID:获取某个指定动物园的信息
  • PUT /zoos/ID:更新某个指定动物园的信息(提供该动物园的全部信息)
  • PATCH /zoos/ID:更新某个指定动物园的信息(提供该动物园的部分信息)
  • DELETE /zoos/ID:删除某个动物园
  • GET /zoos/ID/animals:列出某个指定动物园的所有动物
  • DELETE /zoos/ID/animals/ID:删除某个指定动物园的指定动物

 

六、过滤信息(Filtering)

如果记录数量很多,服务器不可能都将它们返回给用户。API应该提供参数,过滤返回结果。

下面是一些常见的参数。

  • ?limit=10:指定返回记录的数量
  • ?offset=10:指定返回记录的开始位置。
  • ?page=2&per_page=100:指定第几页,以及每页的记录数。
  • ?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。
  • ?animal_type_id=1:指定筛选条件

 

参数的设计允许存在冗余,即允许API路径和URL参数偶尔有重复。比如,GET /zoo/ID/animals 与 GET /animals?zoo_id=ID 的含义是相同的。

七、状态码(Status Codes)

服务器向用户返回的状态码和提示信息,常见的有以下一些(方括号中是该状态码对应的HTTP动词)。

  • 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 - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

八、错误处理(Error handling)

如果状态码是4xx,就应该向用户返回出错信息。一般来说,返回的信息中将error作为键名,出错信息作为键值即可。


{
    error: "Invalid API key"
}

九、返回结果

针对不同操作,服务器向用户返回的结果应该符合以下规范。文章来源地址https://www.toymoban.com/news/detail-467387.html

  • GET /collection:返回资源对象的列表(数组)
  • GET /collection/resource:返回单个资源对象
  • POST /collection:返回新生成的资源对象
  • PUT /collection/resource:返回完整的资源对象
  • PATCH /collection/resource:返回完整的资源对象
  • DELETE /collection/resource:返回一个空文档

到了这里,关于RESTful API 设计指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • # Spring MVC与RESTful API:如何设计高效的Web接口

    🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页 ——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐 🌊 《100天精通Golang(基础

    2024年02月09日
    浏览(86)
  • python程序实现一套超市自助结算系统,实现顾客录入货品信息,系统显示付款总额,以及统计目前的营业总额等功能。

             设计一套超市自助结算系统,实现顾客录入货品信息,系统显示付款总额,以及统计目前的营业总额等功能。         其中货品的基本信息包括:编号(例如001) ,名称(例如面包) ,单价(例如9.9,保留一位有效数字)等。         其中顾客的流水信息包括:流水编号

    2024年02月09日
    浏览(37)
  • python目前哪个版本最稳定,python什么版本比较稳定

    大家好,本文将围绕python目前哪个版本最稳定展开说明,python什么版本比较稳定是一个很多人都想弄明白的事情,想搞清楚python哪个版本好用2020需要先了解以下几个事情。 大家好,小编来为大家解答以下问题,python安装哪个版本比较好,python一般安装哪个版本,现在让我们

    2024年01月25日
    浏览(40)
  • HTTP API 设计指南

    这篇指南介绍描述了 HTTP+JSON API 的一种设计模式,最初摘录整理自 Heroku 平台的 API 设计指引Heroku 平台 API 指引 这篇指南除了详细介绍现有的 API 外,Heroku 将来新加入的内部 API 也会符合这种设计模式,我们希望非 Heroku 员工的API设计者也能感兴趣。 我们的目标是保持一致性,

    2024年02月06日
    浏览(23)
  • RESTful:理解REST架构风格、RESTful API

    一、REST架构风格 REST(英文Representational State Transfer)是一种基于客户端和服务器的架构风格,用于构建可伸缩、可维护的Web服务。REST的核心思想是,将Web应用程序的功能作为资源来表示,使用统一的标识符(URI)来对这些资源进行操作,并通过HTTP协议(GET、POST、PUT、DELET

    2024年02月07日
    浏览(43)
  • DSMM数据安全能力成熟度模型及配套实施指南笔记(附原文下载)

    《GBT 37988-2019 信息安全技术 数据安全能力成熟度模型》和《数据安全能力建设实施指南》原文下载链接在文末      2020年3月1日《GBT 37988-2019 信息安全技术 数据安全能力成熟度模型》正式实施,该标准适用于对企业、组织对数据安全能力进行评估和作为数据安全能力建设的

    2024年02月09日
    浏览(39)
  • RESTful API 简介

    想必使用过 PHP、JSP 这一类服务器动态页面技术的程序员应该都还记得,在使用这种传统的动态页面架构构建应用程序的时候,用于描述用户界面的 HTML 页面通常都是在服务器上完成渲染的。在这种情况下,应用程序在客户端的 UI 通常是很难针对用户所使用的软硬件环境做出

    2024年02月07日
    浏览(46)
  • Restful API

    REST 与技术无关,代表的是一种 软件架构风格 ,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”或“表现层状态转化”。 简单来说,REST的含义就是客户端与Web服务器之间进行交互的时候, 使用HTTP协议中的4个请求方法代表4个不同的动作。 GET用来获取资源

    2024年02月05日
    浏览(48)
  • 什么是RESTful API

    RESTful API是利用HTTP请求访问或使用数据的应用程序接口(API)的体系结构样式。这些数据可用于GET,PUT,POST和DELETE数据类型,这些数据类型指的是与资源相关的操作读取、更新、创建和删除。 网站的API是允许两个软件程序相互通信的代码。API详细说明了开发人员编写从操作

    2024年02月16日
    浏览(39)
  • REST 与 RESTful API

    REST是什么 REST是万维网软件 架构风格 REST是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用 XML格式定义 或 JSON格式定义 。 REST适用于移动互联网厂商作为业务接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。 RES

    2024年02月06日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包