RESTful

作者: 建国同学 | 来源:发表于2020-06-02 20:23 被阅读0次

    一、restful

    它是一种设计风格,设计原则,约束http请求路径的设计,约定http请求如何发起

    二、api

    1. 普通的api

    将某些系统打包成其他系统能用的资源包(java的jar ),让其他系统引入即可用

    2. web方式的api

    将某些系统某些功能模块以web方法对外暴露请求,其他系统发起这个请求,传入指定参数即!
    可获取到对应的功能

    A系统对B系统,提供请求路径,B系统通过这个请求路径,发起请求得到对应功能实现
    api =》应用接口 =》接口

    3. 前后端分离模式开发

    前端 ==》后端暴露接口(api),前端异步调用接口,通过技术返回加工数据(json)==》后端


    三、RESTful设计

    1. 资源

    网络上的所有事物都被抽象为资源,每个资源都有一个唯一的资源定位符(URI)。每个URI代表一种资源(resource),所以URI中不能有动词,只能有名词,而且所用的名词往往与数据库的表名对应。一般来说,数据库中的表都是同种记录的"集合"(collection),所以URI中的名词也应该使用复数。domain就是一资源。

    2. 资源状态转换

    状态改变就是数据发生变动
    GET(SELECT):从服务器取出资源(一项或多项)。
    POST(CREATE):在服务器新建一个资源。
    PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。PUT更新整个对象
    PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性【补丁】)。 PATCH更新个别属性
    DELETE(DELETE):从服务器删除资源。

    注意
    patch 一个某个属性的改动
    put 是多个的改动

    四、设计restful风格接口

    需求:设计一个员工添加的接口

    步骤

      1. 确定接口要操作的资源 :employees --进而可以确定请求路径 --- http://localhost:8080/employees
        【普通的请求路径http://localhost:8080/employees && 参数路径(@PostMaping("/{id}/{name}"))区别:http://localhost:8080/employees/{id}/{name}
      1. 确定对资源做什么操作:添加----就可以确定请求方式 --- post
      1. 明确需求要传的参数:员工的基本信息
      1. 确定请求的返回值:根据需求决定

    url:http://localhost:8080/employees
    请求方式:POST
    请求参数:employees对象
    返回值:json格式数据

    实现

    • method:限定请求的方式,枚举:
      public enum RequestMethod {GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE}

    实例:
    1.属性表示指定当前映射方法只接受get请求方式
    @RequestMapper(value="/employess", method=RequestMethod.GET)

    • params:限定要请求的参数,只有匹配该参数的请求,才会被该方法处理

    实例:
    1.限制请求实体头为json格式
    @RequestMapper(value="/employess", method="Content-Type: application/json")

    • headers:限定请求头信息

    实例:
    headers 限制请求头格式为json
    RequestMapping(value = "/test2", headers = "content-Type=application/json")

    • @PathVariable :
      解析URL上面的 路径参数,并设置到请求映射方法形参中,设置规则:同名原则,如果不同,必须明确指定,形式参数对应哪个路径,也即是,在注解中指定@PathVariable("eid")路径参数名

    简化写法

    @PostMaping
    @GetMaping
    @DeleteMaping
    @PutMaping
    @RestController

    简化版

    五、 状态码

    https://www.cnblogs.com/lyraLee/p/11588417.html

    1.100-199信息响应

    100 Continue: 服务器通知浏览器之前一切正常,请客户端继续请求,如果请求结束,可忽略;

    101 Switching Protocal: 针对请求头的Upgrade返回的信息。表明服务器正在切换到指定的协议。

    103 Early Hints: 此状态代码主要用于与[Link]链接头一起使用,以允许用户代理在服务器仍在准备响应时开始预加载资源

    2.200-299成功响应

    200 OK: 请求成功

    201 Created: 常用于POST,PUT 请求,表明请求已经成功,并新建了一个资源。并在响应体中返回路径。

    202 Accepted: 请求已经接收到,但没有响应,稍后也不会返回一个异步请求结果。 该状态码适用于等待其他进程处理或者批处理的场景。

    203 No-Authoritative Information: 表明响应返回的元信息(meta-infomation)和最初的服务器不同,而是从本地或者第三方获取的。

    主要用于其他资源的镜像和备份。除了前面的情况,首选还是200。

    204 No Content: 请求没有数据返回,但是头信息有用。用户代理(浏览器)会更新缓存的头信息。

    205 Reset Content: 告诉用户代理(浏览器)重置发送该请求的文档。

    206 Partical Content: 当客户端使用Range请求头时,返回该状态码。

    名词解释: 用户代理: 代替用户运行的软件,如web浏览器,或者邮件阅读器。

    3.300-399重定向消息

    300 Multiple Choice: 返回多个响应,需要浏览器或者用户选择;

    301 Moved Permanently: 请求资源的URL被永久的改变,新的URL会在响应的Location中给出。

    浏览器到新的URL重新请求资源,因为有些客户端会把请求方式method改成GET。所以该状态码建议GET和HEAD方法中使用。

    搜索引擎会更新地址到资源的链接(SEO中‘link-judge’被发送到新的URL)。

    302 Found: 请求资源的URL被暂时修改到Location提供的URL。未来可能还会有新的修改。

    浏览器会根据新的URL重新请求资源。有些客户端会把方法method改为GET,建议在GET和HEAD方法中使用。

    搜索引擎不会更改URL到资源的。// 应用于负载均衡

    303 See Other: 服务通过返回的响应数据指导客户端通过GET方法去另一个URL获取资源。

    通常用于POST或者PUT的请求返回结果,重定向到信息提示页面或者进度展示页面。

    重定向页面的方法是GET方法。

    304 Not Modified: 资源未变更。服务器根据请求头判断,需要资源未修改,只返回响应头;否则将资源一起返回。

    发生场景:1)请求方法安全(如GET,HEAD请求)

    2)条件请求并且使用了If-None-Match或者If-Modified-Since 的请求头

    如果想使用200状态码达到相同304效果,需要强制缓存,需要额外的请求头:Cache-Control, Expires, Vary

    307 Temporary Redirect: 临时重定向。基本和302相同。

    唯一的区别是这个状态码严格禁止浏览器到新URL请求资源时修改原来的请求方式和请求体。

    就是说原来使用POST,这次还是要使用POST。

    如果想要用PUT方法去修改一个服务器上没有的资源,可以用303状态码

    如果想要把一个POST方法改为GET,请使用303。

    308 Permanent Redirect: 永久重定向。基本和301相同。但是严格禁止修改请求方式和请求体。

    4. 400-499 客户端错误响应

    400 Bad Request: 请求语法有问题,服务器无法识别。

    没有host请求头字段,或者设置了超过一个的host请求头字段。

    401 UnAuthorized: 客户端未授权该请求。缺乏有效的身份认证凭证,一般可能是未登陆。登陆后一般都解决问题。

    403 Forbidden: 服务器拒绝响应。权限不足。

    404 Not Found: URL无效或者URL有效但是没有资源。

    405 Method Not Allowed: 请求方式Method不允许。但是GET和HEAD属于强制方式,不能返回这个状态码。

    406 Not Acceptable: 资源类型不符合服务器要求。

    407 Proxy Authorization Required: 需要代理授权。

    408 Request Timeout:服务器将不再使用的连接关闭。响应头会有Connection: close。

    426 Upgrade Required: 告诉客户端需要升级通信协议。

    5. 500-599 服务器错误响应

    500 Internal Server Error: 服务器内部错误,未捕获。

    502 Bad Gateway: 服务器作为网关使用时,收到上游服务器返回的无效响应。

    503 Service Unavailable: 无法服务。一般发生在因维护而停机或者服务过载。

    一般还会伴随着返回一个响应头Retry-After: 说明恢复服务的估计时间。

    504 Gateway Timeout: 网关超时。服务器作为网关或者代理,不能及时从上游服务器获取响应返回给客户端。

    505 Http Version Not Supported: 发出的请求http版本服务器不支持。如果请求通过http2发送,服务器不支持http2.0,就会返回该状态码。

    相关文章

      网友评论

          本文标题:RESTful

          本文链接:https://www.haomeiwen.com/subject/uxuyzhtx.html