RESTful规范
推荐博客:https://www.cnblogs.com/GGGG-XXXX/p/9564651.html RESTful规范 我们在浏览器中能看到的每个网站,都是一个web服务。那么我们在提供每个web服务的时候,都需要前后端交互,前后端交互就一定有一些实现方案,我们通常叫web服务交互方案 目前主流的三种web服务交互方案: -- REST ( Representational State Transfer)表述性状态转移 -- SOAP (Simple Object Access Protocol) 简单的对象访问协议 -- XML-RPC (XML Remote Procedure Call)基于XML的远程过程调用 RESTful 表征性状态转移。这里所说的表征性,其实指的就是资源。通常我们称为资源状态转移 资源:任何事物,只要有被引用到的必要,它就是一个资源,不仅包括文本图片视频也包括抽象的概念,比如两个人的关系.资源在web中的唯一标识URI URI 统一资源标志符。 URL 统一资源定位符。(URL可以说是URI的子集,通过定位的方式实现的URI。) URI是给我们的资源进行标识的,URL是描述我们资源地址的。 统一资源接口:只使用一个URL,然后根据HTTP请求方式的不同,对资源进行不同的操作,这个就是是统一资源接口 资源的表述:资源的表述其实就是资源的展现形式,我们客户端和服务端传输的都是资源的表述,而不是资源本身。 状态转移:从当前资源的表述(也可以说状态或者表现层)会跳转到其他的资源状态,通过超链接的指引,实现"表现层状态转移" 总结: (1)在web中,只要有被引用的必要都叫资源。 (2)每个URI代表一个资源,独一无二的。 (3)客户端通过HTTP的方法,对服务器端资源进行操作; (4)客户端和服务器之间,传递这种资源的某种表现层; (5)通过超链接的指引,实现"表现层状态转移"。 10条规范: 1. 面向资源编程 每个URL代表一种资源,URL中尽量不要用动词,要用名词。 2. 根据method不同,进行不同的操作 GET/POST/PUT/DELETE/PATCH 3. 在URL中体现版本 https://www.bootcss.com/v1/mycss https://v1.bootcss.com/mycss 4. 在URL中体现是否是API https://www.bootcss.com/api/mycss https://api.bootcss.com/mycss 5. 在URL中的过滤条件 https://www.bootcss.com/v1/mycss?page=3 6. 尽量使用HTTPS https://www.bootcss.com/v1/mycss 7. 响应时设置状态码 1** 信息,服务器收到请求,需要请求者继续执行操作 2** 成功,操作被成功接收并处理 3** 重定向,需要进一步的操作以完成请求 4** 客户端错误,请求包含语法错误或无法完成请求 5** 服务器错误,服务器在处理请求的过程中发生了错误 2xx:成功 200:OK,请求成功 201:OK,新的资源建立(post命令) 202:请求被接受,但处理未完成 204:OK,但没有内容返回 ------------------------------------------------------------------------ 3xx:重定向:需要用户代理执行更多的动作 301:Moved Permanently永久转移(所请求的资源已被指派为新的固定URL) 302:Found 暂时转移(所请求的资源临时位于另外的URL) 304:文档没有修改(条件GET) 307:Temporary Redirect(临时重定向) ------------------------------------------------------------------------ 4xx:客户差错 400:Bad Request 请求错误 401:Unauthorized 未认证(该请求要求用户认证) 403:Forbidden 不明原因的禁止 404:Not Found 未找到 ------------------------------------------------------------------------ 5xx:服务器差错 500:Internal Server Error(服务器错误) 501:没有实现 502:错误的网关(网关或上游服务器来的无效响应) 503:Service Unavailable(一般是访问人数过多) 8. 返回值 GET请求 返回查到所有或单条数据 POST请求 返回新增的数据 PUT请求 返回更新数据 PATCH请求 局部更新 返回更新整条数据 DELETE请求 返回值为空 9. 返回错误信息 返回值携带错误信息 10. Hypermedia API 如果遇到需要跳转的情况 携带调转接口的URL ret = { code: 1000, data:{ id:1, name:'小强', depart_id:http://www.luffycity.com/api/v1/depart/8/ } }