php Restful设计
- 1、restful是基于资源的,面向资源架构风格(一个链接,一张图、一个文本等等)
- 2、restful的http协议
- 2.1 url:
- 2.1.1 port 服务端口,默认为80
- 2.1.2 path 访问资源的路径
- 2.1.3 query-string 发送给http服务器的数据
- 2.1.4 anchor 锚
- 2.2 请求 组成格式:请求行、消息报头、请求正文
- 请求行格式: Method Request-URI HTTP-Version CRLF
- 例子: GET / HTTP/1.1 CRLF
- 2.3请求方法
- GET :请求获取Request-URI的所表示的资源
- POST :在Request-URI所标识的资源后附加新的数据
- HEAD :请求获取由Request-URI所标识的资源的相应消息包头
- PUT : 请求服务器存储一个资源,并用Request-URI作为其标识
- DELETE :请求服务器删除Request-URI所表示的资源
- OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项请求
- 2.4 响应 组成格式:状态行、消息报头、响应正文
- 状态行格式 : HTTP-Version Status-Code Reason-PhRase CRLF
- 例子:HTTP/1.1 200 OK
- 2.5 常用状态码
- 200 ok //客户端请求成功
- 400 Bad Request //客户端请求有语法错误,不能被服务器所理解
- 401 Unauthorized //服务器收到请求,但是拒绝提供服务,需要授权访问
- 404 Not Found //请求资源不存在
- 500 Internal Server Error //服务器发生不可预期的错误
- 503 Server Unavailable //服务器当前不能处理客户端请求,一般服务器达到性能瓶颈拒绝服务
- 3、如何设计RESTful API
- 3.1 资源路径(URI)
- 概念:在RESTful架构中,每个网址代表一种资源,所以网址中不能有动词,只能用名词。一般来说API中的名词应该使用复数
- 举例:有一个API提供动物园(zoo)的信息,还包括各种动物和雇员的信息,则它的路径应该设计成下面这样
- https://api.example.com/v1/zoos //动物园资源
- https://api.example.com/v1/animals/2 //动物园资源
- 3.2 HTTP动词
- 概念:对于资源的操作(CURD),由HTTP动词表示
- GET:从服务器获取资源(一项或多项)
- POST:在服务器新建一个资源
- PUT:在服务器更新资源(客户端提供改变后的完整资源)
- PATCH:在服务器更新资源(客户端提供改变的属性)【注意】:这个不常用,更新一般都用PUT,用PUT更新会返回所有字段,而用PATCH更新只会返回更新的字段
- DELETE:从服务器删除一个数据
- 举例:
- POST /zoos:新建一个动物园
- GET /zoos/ID:获取某个指定动物园的信息
- PUT /zoos/ID:更新某个指定动物园的信息
- DELETE /zoos/ID:删除某个动物园
- 3.3 过滤信息
- 概念:如果记录数量很多,服务器不可能都将它们返回给用户。API应该提供参数,过滤返回结果
- 举例:
- ?offset=10:制定返回记录的开始位置
- ?page=2&per_page=100:制定第几页,以及每页的记录数
- ?sortby=name&order=asc:制定返回结果排序,以及排序顺序
- ?animal_type_id=1:制定筛选条件
- 3.4 状态码
- 200 ok 服务器成功返回用户请求的数据,该操作是幂等的
- 201 CREATED 新建或修改数据成功
- 204 NO CONTNET 删除数据成功
- 400 BAD REQUEST 用户发出的请求有错误,该操作是幂等
- 401 Unauthorized 表示拥护没有认证,无法进行当前操作
- 403 Forbidden 表示拥护访问时被禁止的
- 422 Unprocesable Entity 当创建一个对象时,发生一个验证错误
- 500 INTERNAL SERVER ERROR 服务器发生错误,用户将无法判断发出的请求是否成功
- 3.5 错误处理
- 概念:如果状态码是4xx或者5xx,就应该像用户返回错误信息。一般来说,返回的信息中将error作为键名,出错信息作为键值即可
- {
- 'error' : '参数错误'
- }
- 3.6 返回结果
- 针对不同操作,服务器向用户返回的结果应该符合以下规范:
- GET /collections:返回资源对象的列表(数组)
- GET /collections/identity:返回单个资源对象
- POST /collections:返回新生成的资源对象
- PUT /collections/identity:返回完整的资源对象
- PATCH /collections/identity :返回被修改的属性
- DELETE /collections/identity : 返回一个空文档
- 4、google商店搜索restful api client找到 Restlet Client-REST API Testing,安装调试restful工具
- 5、项目实例
- 项目需求:用户登陆、注册
- 文章发表、编辑、管理、列表
- 分析资源:用户(user) 、文章(article)
- 资源路径:/user 、 /article
- HTTP动词:POST、GET、PUT、DELETE
- 过滤信息:文章分页筛选
- 状态码:200、404、422、403
- 错误处理:输出json格式错误信息
- 返回结果:输出json数组或者json对象
https://blog.csdn.net/jj546630576/article/details/77948445
php Restful设计的更多相关文章
- RESTful 设计理论
RESTful 设计: 1.协议通信协议:https 2.域名部署在API专用域名下,除非API很简单(https://www.example.com/api)https://api.example. ...
- Restful设计思想
1.REST的架构设计 代表性状态传输(Representational State Transfer,REST)在Web领域已经得到了广泛的接受,是基于SOAP和Web服务描述语言(Web Serv ...
- [RESTful] 设计要素
如何设计RESTful API 资源路径(入何规划资源路径) HTTP动词(请求方式 GET/POST...) 过滤信息(分页,查询操作的时候进行信息过滤) 状态码(服务器端响应什么样的状态码) 错误 ...
- django RESTful设计方法
1. 域名 应该尽量将API部署在专用域名之下. https://api.example.com 如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下. https://example.org ...
- RESTful设计方法
REST REST,即Representational State Transfer的缩写.维基百科称其为“具象状态传输”,国内大部分人理解为“表现层状态转化”. RESTful是一种开发理念.维基百 ...
- restful设计参考
https://www.cnblogs.com/pyspark/p/8599210.html 以下查阅多处文档,思考总结: 所谓restful规范代表一种理想状态,首先对此种规范表示赞同,但应不忘实事 ...
- RESTful设计中的常见疑问
最近写了几个有关RESTful的API相关内容,也谈谈对常见问题的自己的理解. 什么是RESTful 详情可以看http://www.ruanyifeng.com/blog/2011/09/restf ...
- Java Web学习(八)RESTful设计
一.RESTful设计风格 REST :指的是一组架构约束条件和原则. RESTful :满足这些约束条件和原则的应用程序或设计就是 . REST 原则 客户端和服务器之间的交互在请求之间是无状态的. ...
- RESTful设计
RESTful架构: (1)每一个URI代表一种资源: (2)客户端和服务器之间,传递这种资源的某种表现层: (3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化& ...
随机推荐
- Vue--通过button跳转到其他组件并携带id参数
一.创建vue文件 ’ <template> <div> goodsCommon<br/> goodsCommon<br/> goodsCommon&l ...
- SSH 相关基础
检查是否安装: sudo apt-cache policy openssh-client sudo apt-cache policy openssh-server 也可直接用 sudo apt-ca ...
- 统计Linux下的CPU状态信息
def cpu(): all_cpus=[] with open('e:/cpu.txt') as f: core={} for line in f.readlines(): ab=line.spli ...
- Spring MVC使用ModelAndView进行重定向(转)
1.Servlet重定向forward与redirect: 使用servlet重定向有两种方式,一种是forward,另一种就是redirect.forward是服务器内部重定向,客户端并不知道服务器 ...
- SQLSERVER 时间函数汇总
1.求当天的年份 (getdate(): 2012/05/08 18:07:26) SELECT YEAR(GETDATE()) --2012 2. 求当天的月份 SELECT M ...
- typescript+react+antd基础环境搭建
typescript+react+antd基础环境搭建(包含样式定制) tsconfig.json 配置 // 具体配置可以看上面的链接 这里module moduleResolution的配置都会影 ...
- [Vue CLI 3] 配置解析之 parallel
官方文档中介绍过在 vue.config.js 文件中可以配置 parallel,作用如下: 是否为 Babel 或 TypeScript 使用 thread-loader. 该选项在系统的 CPU ...
- python os 模块介绍
""" 重命名文件 os.rename(src,dst) os.rename('123.txt','124.txt') 删除文件 os.remove(path) os.r ...
- Nginx教程(一) Nginx入门教程 (转)
1 Nginx入门教程 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行.由俄罗斯的程序设计师IgorSysoev所开 ...
- Hdu 4291
题目链接 这道题, 给我的最大的知识点就是对于去模运算,一定可以找到循环节,这题只不过是嵌套了两层,可以分别找到循环节.关于这题如何找循环节的,直接暴力,网上也有很多. 找到循环节之后,另一个知识点就 ...