RESTFul规范

RESTFul是一种HTTP API接口规范,只要满足的RESTFul规范,即可称为RESTFul API。

既然是接口,我们先来了解一下,他和传统的API接口有何不同吧。

本文以尽量简单明了的文字来介绍、描述,只讲核心内容,仅供入门指引。

1 与传统API的区别

RESTFul世界中,一切皆抽象为资源(Resource)。

用户是资源,文章是资源、评论是资源,抽象一点的session、token等均是资源。

下面例子,我们通过以下几个常用的HTTP方法对资源(图书)进行操作。

RESTFul中:

操作 方法 示例

查询 GET GET /books

增加 POST POST /books

修改 PUT PUT /books

删除 DELETE DELETE /books

传统API中:

操作 方法 示例

查询 GET GET /api/book/getBook

增加 POST POST /api/book/addBook

修改 POST POST /api/book/updateBook

删除 GET/POST POST /api/book/deleteBook

2 URL设计

RESTFul API规范很简单,关键只需满足这一点。

动词(HTTP动作) + 名词(资源)

2.1 常用动作

通常我们采用以下5种 HTTP方法(动作)。

GET:查询(Read)

POST:增加(Create)

PUT:更新(Update)

PATCH:部分更新,不常用(Update)

DELETE:删除(Delete)

2.2 名词尽量复数

名词尽量采用复数(语义更明确,但并不强制),举个例子:

类型 操作 示例

单数 获取所有图书 GET /book

单数 获取ID为1的图书 GET /book/1

复数 获取所有图书 GET /books

复数 获取ID为1的图书 GET /books/1

不难发现,复数形式语义更明确。

2.3 方法 & 过滤参数

方法应当以路径(path)的方式传递:

示例:

获取部门:GET /departments

获取部门下的所有员工:GET /departments/{id}/employees

获取部门下的某个员工:GET /departments/{id}/employees/{id}

文章点赞:PUT /articles/{id}/praise

过滤参数应当以查询字符串(QueryString)的方式传递:

示例:

获取第1页,每页显示10条:GET /books?page=1&per_page=10

获取已经发布的文章:GET /articles?published=true(或等于1也行)

何时使用方法,何时使用过滤参数?

区别:

方法:获取后的数据结构不同了。

过滤参数:获取后的数据结构还是一样的,只是数量减少了。

3 响应请求

必须尽可能返回意义准确的HTTP状态码,不要一味的返回200状态码。

状态码主要分为5类:

在RESTFul中通常我们只需要用到2XX、4XX、5XX。

1XX:信息类

2XX:成功类

3XX:重定向

4XX:客户端错误

5XX:服务器错误

有关状态码的详细参考:HTTP状态码

常用HTTP状态码:

响应码 说明

200 OK 请求已成功

201 Created 资源已创建

204 No Content 请求已成功,但无返回内容

304 Not Modified 缓存有效

400 Bad Request 语义有误,当前请求无法被服务器理解,请求参数错误

401 Unauthorized 当前请求需要用户认证(登录)

403 Forbidden 用户已认证(登录),但权限不足

404 Not Found 请求源未在服务器上被发现

405 Method Not Allowed 请求方法不能被用于请求相应的资源,如使用PUT方法访问只接受POST方法的API

500 Internal Server Error 服务端内部错误

502 Bad Gateway 网关错误

504 Gateway Timeout 网关超时

3.1 成功类

对于成功类,除了GET请求需要返回响应体(数据)之外,其他请求均可不返回响应体。

获取文章:

返回200状态码,返回的数据不需要进行多余的包装。

GET /articles/1

HTTP/1.1 200 OK

{"title": "文章标题",

"content": "文章内容"

}

增加文章:

返回201状态码,可选返回响应体(创建后的对象)。

POST /articles

HTTP/1.1 201 Created

{"id": 1,

"title": "文章标题",

"content": "文章内容"

}

HTTP/1.1 201 Created

更新文章:

若返回响应体(更新后的对象)则使用200状态码,否则使用204状态码。

PUT /articles/1

HTTP/1.1 200 OK

{"id": 1,

"title": "文章标题",

"content": "文章内容"

}

HTTP/1.1 204 No Content

删除文章:

返回204状态码。

DELETE /articles/1

HTTP/1.1 204 No Content

3.2 错误类

建议为所有错误的请求响应体加上错误代码、消息字段。

错误代码建议由HTTP状态码 + 自定义的错误代码组成。

例如:客户端错误状态码为400,账号或密码错误代码为01(自定义),组成40001错误代码。

3.2.1 客户端错误

登录失败:

POST /tokens/login

HTTP/1.1 400 Bad Request

{"error_code": 40001,

"message": "用户名或密码错误"

}

用户名已被注册:

POST /users

HTTP/1.1 400 Bad Request

{"error_code": 40002,

"message": "用户名已被注册"

}

未登录:

HTTP/1.1 401 Unauthorized

{"error_code": 40101,

"message": "用户未登录"

}

权限不足:

HTTP/1.1 403 Forbidden

{"error_code": 40301,

"message": "权限不足"

}

文章不存在或已被删除:

HTTP/1.1 404 Not Found

{"error_code": 40401,

"message": "文章不存在或已被删除"

}

3.2.2 服务器错误

HTTP/1.1 500 Internal Server Error

{"error_code": 50001,

"message": "服务器内部错误,请稍后再试或联系管理员"

}

wordpress rest api Reference

REST API Developer Endpoint Reference #REST API Developer Endpoint Reference

Resource Base Route

Posts /wp/v2/posts

Post Revisions /wp/v2/posts//revisions

Categories /wp/v2/categories

Tags /wp/v2/tags

Pages /wp/v2/pages

Page Revisions /wp/v2/pages//revisions

Comments /wp/v2/comments

Taxonomies /wp/v2/taxonomies

Media /wp/v2/media

Users /wp/v2/users

Post Types /wp/v2/types

Post Statuses /wp/v2/statuses

Settings /wp/v2/settings

Themes /wp/v2/themes

Search /wp/v2/search

Blocks /wp/v2/blocks

Block Revisions /wp/v2/blocks//autosaves/

Block Renderer /wp/v2/block-renderer

====================================================================

以上转自:www.jianshu.com/p/843a524dd88f 作者:izhouteng

更多阅读资料:

REST API手册

WordPress Rest API 最细接口详解

php restful规范,RESTFul API规范 详细指南相关推荐

  1. restful 风格 web api规范

    协议:http/https 域名 : http://api.example.com/xxx/xxx api: 标明api接口服务 xxx: 服务 xxx: 资源 版本控制: 一.使用MediaType ...

  2. jOOQ是如何设计事务API(详细指南)

    从jOOQ 3.4开始,我们在jOOQ的JDBC之上有一个简化事务逻辑的API,从jOOQ 3.17和 #13502 开始,在R2DBC之上也将提供一个同等的API,用于反应式应用. 与所有的jOOQ ...

  3. 【Restful】你还不懂Restful API规范吗?

    进入正文之前,先带着小伙伴们了解几个名词,源自百度百科. 标题中涉及的核心名词API,restful 扩展 何为API呢? API(Application Programming Interface, ...

  4. RESTful API 规范

    REST 和 RESTfulAPI REST是REpresentational State Transfer表述性状态转移 的首字母缩写,是一种基于超媒体构建分布式系统的架构风格.与其他架构风格一样, ...

  5. yii2 RESTful api的详细使用

    什么是RESTful风格的API 对于各种客户端设备与服务端的通信,我们往往都通过API为客户端提供数据,提供某种资源.关于RESTful的概念,一查一大推,一两句也解释不清,姑且先按照我们通俗的理解 ...

  6. php yii2 api框架,Yii2框架制作RESTful风格的API快速入门教程

    先给大家说下什么是REST restful REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次出现在2000年Ro ...

  7. yii2restful规范的api使用

    说明:restful是一套优秀的接口调用规范. 使用规范: 1,安装yii2 使用composer安装 安装完 Composer,运行下面的命令来安装 Composer Asset 插件: php c ...

  8. RESTful风格的API设计

    RESTful风格的API设计 1.你怎么理解 RESTful 2000 年,Roy Thomas Fielding 博士在他那篇著名的博士论文<Architectural Styles and ...

  9. resulful规范_ResultFul API

    什么是REST? 什么是RESTful API? 总结 技术交流的时候遇到了这样的一个问题,被问及开发中用到的是不是Restful API,我说的是,我们现在用到的不属于完全是Restful API. ...

最新文章

  1. 照片换色 使用Python 或者 java
  2. [再寄小读者之数学篇](2014-04-18 from 352558840@qq.com [南开大学 2014 年高等代数考研试题]二次型的零点)...
  3. pandas 里面对nan的判断
  4. python语言编程流程图-用流程图带你更好理解python语法
  5. 测试lazy_enable_if的所有变体
  6. Java Optional学习笔记
  7. js整体缩小网页_妙用JavaScript实现网页的任意缩放
  8. java求正整数和_求连续正整数的和-Java
  9. Remoting學習(三)----Reomoting 基楚知識
  10. tfs 2013 access deny
  11. Codeforces.741D.Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths(dsu on tree 思路)
  12. ERROR 1044 (42000)
  13. 科技云报道:新基建已到来,网络安全建设跟上了吗?
  14. 《阅读的方法》做一点小努力
  15. Alex 的 Hadoop 菜鸟教程: 第10课 Hive 安装和使用教程
  16. 公众号如何向用户发送重要的服务通知?
  17. AD怎么输入坐标_实名推荐|相见恨晚的CAD坐标提取技巧
  18. ZOJ 1655 Transport Goods
  19. 光时域反射仪都有什么功能
  20. shell脚本文本三剑客之awk

热门文章

  1. .net core连接MongoDB
  2. html5 tab菜单切换页面,11个常用的jQuery TAB切换菜单源码及制作教程
  3. 【ArcGIS遇上Python】ArcGIS批量处理栅格影像(NDVI)归一化完整案例代码
  4. 【ArcGIS风暴】在ArcGIS中实现将一个圆16等分
  5. C#生成二维码(含解码)
  6. Linux下最简单的修改文件名后缀的命令行技巧
  7. Android之关于电话录音原理,目前的方法还是只能录MIC
  8. Android之面试题总结加强版(一)
  9. text 热敏打印机_只要有想象力,打印机都能做游戏
  10. 贝叶斯分类器_Sklearn 中的朴素贝叶斯分类器