php restful规范,RESTFul API规范 详细指南

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 最细接口详解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

求对一组数据进行排名的算法

为什么80%的码农都做不了架构师?>>> 我现在有一组数据,比如:25,19,29,3 怎么用java获得这组数据的排名,获得排名的结果应该是3,2,4,1 如果有相等…

移动端h5唤起键盘_移动端H5界面打开后,如何自动调用软键盘

test(){// let aa this.$refs.input1.blur();// this.$nextTick((x)>{ //正确写法// // this.$refs.inputs.focus();// // console.log(x)// // this.$refs.inp[0].$refs.input.focus();// },3000)// $api.dom(input).focus();// this.$refs.Inp.focus();// aa.focus();// …

一份数学小白也能读懂的「马尔可夫链蒙特卡洛方法」入门指南

在众多经典的贝叶斯方法中,马尔可夫链蒙特卡洛(MCMC)由于包含大量数学知识,且计算量很大,而显得格外特别。本文反其道而行之,试图通过通俗易懂且不包含数学语言的方法,帮助读者对 MCMC 有一个直…

使用 xunit 编写测试代码

使用 xunit 编写测试代码Introxunit 是 .NET 里使用非常广泛的一个测试框架,有很多测试项目都是在使用 xunit 作为测试框架,不仅仅有很多开源项目在使用,很多微软的项目也在使用 xunit 来作为测试框架。Get Started在 xunit 中不需要标记测试…

eclipse如何写python_(怎么用eclipse写python)python eclipse 使用教程

用eclipse写了python之后怎么回去写java?eclipse只是一个工具,开发java和python都是插件吧,有个Open Perspective可以选择你的开发视角怎么用eclipse写python方法/步骤如果不会Eclipse中配置搭建Python开发环建第一个File->New->Other弹出Selecta…

DBDesigner 4 与 MySql 5 不能连接主要是驱动的原因

DBDesigner 4 与 MySql 5 不能连接主要是驱动的原因,到 http://crlab.com/dbx/download.html 下载最新的驱动并安装,在安装路径中找到dbexpmda.dll这个文件拷贝到DBDesigner的安装路径中。 然后下载一个最新版本的libMYSQL.dll,也拷贝到DBDes…

白话AI:看懂深度学习真的那么难吗?初中数学,就用10分钟

如果在这个人工智能的时代,作为一个有理想抱负的程序员,或者学生、爱好者,不懂深度学习这个超热的话题,似乎已经跟时代脱节了。但是,深度学习对数学的要求,包括微积分、线性代数和概率论与数理统计等&#…

mysql特性举例_MySQL事务的四大特性和隔离级别

1、事务的四大特性(ACID)#### 1.1、原子性(Atomicity)原子性是指事务包含的一系列操作要么全部成功,要么全部回滚,不存在部分成功或者部分回滚,是一个不可分割的操作整体。1.2、一致性(Consistency)一致性是可以理解为事务对数据完整性约束的…

IdentityServer4密码模式

Oatuth2协议的密码模式介绍用户会将用户名,密码给予客户端,但是客户端不保存此信息,客户端带着用户的密码请求认证服务器,认证服务器密码验证通过后后将token返回给客户端。 这里借用下阮一峰老师画的图(博客地址》htt…

IKVM 编程武林之.NET派的北冥神功

为什么80%的码农都做不了架构师?>>> 在编程武林中,Java派成立较久底子雄厚,虽然掌门人Sun已经老态龙钟,镇山之技的Java语言已经被后进的新秀.NET派的C#压得喘不过气来,甚至有时候Sun老大还得跑到.NET派潜伏…

php 自定义菜单 openid,微信公众平台开发(99) 自定义菜单获取OpenID

关键字 微信公众平台 自定义菜单 OpenID作者:方倍工作室原文:http://www.cnblogs.com/txw1958/p/weixin-menu-get-openid.html在这篇微信公众平台开发教程中,我们将介绍如何在自定义菜单中获得用户的OpenID。本篇开发教程的实质是微信自定义菜…

mysql优化的重要参数 key_buffer_size table_cache

MySQL服务器端的参数有很多,但是对于大多数初学者来说,众多的参数往往使得我们不知所措,但是哪些参数是需要我们调整的,哪些对服务器的性能影响最大呢?对于使用Myisam存储引擎来说,主要有key_buffer_size和…

上海大华条码称代码_上海大华计价电子秤 使用软件 TM-H 大华条码称设置15KG

电子秤上海,电子秤价格,电子秤上海牌子好 电子秤有哪些电子秤那个牌子好,产品质量好大华电子秤软件下载,大华电子秤设置,大华电子秤软件郑重声明:本店所售大华条码秤,属于上海大华的正品&#x…

代码传奇 | 明明可以靠颜值 却用代码把人类送上了月球的女人——Margaret Hamilton

据说「软件工程师」这个名词就是她发明的玛格丽特站在阿波罗计算机指导手册 (AGC) 的源代码程序列表旁边,这些材料摞起来比她的人还要高。图片来源:Margaret Hamilton缔造传奇的人似乎有个共性:本来没想干一票大的,甚至她的打算都…

如何在 ASP.Net Core 中使用 NCache

虽然 ASP.Net Core 中缺少 Cache 对象,但它引入了三种不同的cache方式。内存缓存分布式缓存Response缓存Alachisoft 公司提供了一个开源项目 NCache,它是一个高性能的,分布式的,可扩展的缓存框架,NCache不仅比 Redis 快…

oracle 动态游标行数,oracle动态游标的简单实现方法

下面就是例子程序--明细表打印予处理 通用报表:procedure mx_print_common(pd_id in mx_pd_syn.pd_id%type,p_pd_mxb_id IN mx_pd_mxb_syn.p_mxb_id%type,p_dept_no IN sc_mxk.dept_code%type,p1 sc_bz_syn.bz_code%type,p2 sc_cjjc_syn.cjjc_code%type,p3 sc_mxk.…

每扇区2048字节的U盘乱码的数据恢复

每扇区2048字节的U盘乱码的数据恢复一个U盘,FAT32分区,显示的是乱码,远程看对方的U盘参数,发现一个比较怪的现象:每扇区字节数是2048字节(U盘量产时可能是以光盘形式形成的),对方传的…

为什么有些大公司的效率弱爆了?

阅读本文大概需要5分钟。上周写了篇文章:为什么有些大公司的技术弱爆了?不少朋友读完后表示有同感,还有一些朋友在读者群探讨大公司效率问题。有几个朋友谈到自己的公司效率低下,做一件事需要层层审批,并且遇到各种阻力…

2018年最有前景的十大行业

我们想和大家分享的是围绕十个行业、数十个细分领域,在2018年发展趋势展望:01 消费新零售——平台级近半年,新零售已被多次提及。但在年终盘点我们再次提到这个“热词”,是因为该领域未来还将出现超级平台级的公司。新零售未来更多…

oracle 监听 无法连接,解决ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务...

你还有可能是遇到了定时的问题。如果监听器被重新启动,那么数据库实例就必须向它重新注册。通常情况下,每60秒就会出现这样的问题。如果你迫不及待,那么就以数据库管理员的身份登录到数据库服务器,并且运行“更改系统注册器”&…