zoukankan      html  css  js  c++  java
  • REST API

    是什么

    REST(representational state transfer) 表现层状态转换。

    是浏览器与服务器通信方式的一种架构风格。

    • Resource 资源
    • Representation 表现层
    • State Transfer  状态转换

    基于 REST 的服务被称为 RESTful 服务。

     REST 不依赖于任何协议,但是几乎每个 RESTful 服务使用 HTTP 作为底层协议。

    目的

    服务的目的是提供一个窗口给客户端以便客户端能访问这些资源。服务架构师和开发人员想要这些服务变得易于实现、维护、扩展、伸缩。RESTful 架构具备这些。

    核心概念

    1. 互联网上所有可访问的内容,都是资源(图片,视频文件,网页...)
    2. 服务器保存资源,客户端请求资源,客户端和服务器之间,传递这种资源的某种表现层;
    3. 同一个资源,有多种表现形式
    4. 协议本身不带有状态,通信时客户端必须通过参数,表示请求不同状态的资源
    5. 状态转换通过HTTP动词表示,客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。

    HTTP动词

    操作

    SQL方法

    HTTP动词

    CREATE

    INSERT

    POST

    READ

    SELECT

    GET

    UPDATE

    UPDATE

    PUT/PATCH

    DELETE

    DELETE

    DELETE

    状态码

    状态码

    200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。

    201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。

    202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)

    204 NO CONTENT - [DELETE]:用户删除数据成功。

    400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。

    401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。

    403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。

    404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。

    406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。

    410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。

    422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。

    500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

    返回结果

    状态码

    GET /collection:返回资源对象的列表(数组)

    GET /collection/resource:返回单个资源对象

    POST /collection:返回新生成的资源对象

    PUT /collection/resource:返回完整的资源对象

    PATCH /collection/resource:返回完整的资源对象

    DELETE /collection/resource:返回一个空文档

    优劣

    优:

    1. 跨平台,管你是Java,还是PHP,还是Node.js还是Go,你都得支持HTTP请求。我API平台只需要提供这个语言的SDK,保证能按照消息协议调用就好。
    2. 将复杂的内部业务系统抽象为通用调用请求。包装了复杂的业务逻辑,对外提供统一的,好管理的接口。并可以定制化设计,计费,授权一类的容易管理。

    劣:

    1. 协议描述能力弱化RestfulURI无法完全对请求参数做强格式校验。最后的方法参数绑定,模拟内部请求时往往容易出问题,尤其是以Java等强格式语言的系统。不能像WebService一样清晰描述请求报文。
    2. 同样的道理,响应结果为了是JSONXML。这当中,编码,正反序列化,等操作,往往就会有性能瓶颈。而且,Java在这块资源消耗极大。以Github的ROP这个框架为例,当年测试时,它在并发请求过高的时候就会有一个内存泄漏问题。

    相关

    json-server

    用来为前端模拟Rest API的。

    Install

    install
    1
    $ npm install -g json-server

    Example

    创建一个db.json

    install
    1
    2
    3
    4
    5
    6
    7
    8
    9
    {
      "posts": [
        "id": 1, "title""json-server""author""typicode" }
      ],
      "comments": [
        "id": 1, "body""some comment""postId": 1 }
      ],
      "profile": { "name""typicode" }
    }

    开启json server 

    install
    1
    $ json-server --watch db.json

    然后打开http://localhost:3000/posts/1,你会看到

    install
    1
    "id": 1, "title""json-server""author""typicode" }

    demo: rest-api-demo.zip

    postman

    chrome插件,一个 HTTP 通信测试工具,模拟请求的。可以模拟GET, POST, PUT, DELETE, 等等的各种请求。(测试上面那个demo的时候可以用它模拟请求)

    可到官网 GetPostman.com 下载独立安装包;也可以参考这篇文章www.cnblogs.com/mafly/p/postman.html,下载 Chrome 浏览器的插件。

  • 相关阅读:
    yii2 gii 命令行自动生成控制器和模型
    控制器中的方法命名规范
    Vue Property or method "" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based
    IDEA插件:GsonFormat
    Spring Boot : Access denied for user ''@'localhost' (using password: NO)
    Typora添加主题
    Git基础命令图解
    Java Joda-Time 处理时间工具类(JDK1.7以上)
    Java日期工具类(基于JDK1.7版本)
    Oracle SQL Developer 连接Oracle出现【 状态: 失败 -测试失败: ORA-01017: invalid username/password; logon denied】
  • 原文地址:https://www.cnblogs.com/sameen/p/6143470.html
Copyright © 2011-2022 走看看