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 浏览器的插件。

  • 相关阅读:
    IOS证书的申请和使用
    团队开发中如何共用证书
    IOS 开发文件操作——NSFileManager
    RxJava中的doOnSubscribe默认运行线程分析
    XMPP协议实现即时通讯底层书写 (一)--从RFC6121阅读開始
    ant 打批量渠道包,第三方项目作为library打包出错的问题
    hdu5289 2015多校联合第一场1002 Assignment
    【一步步学OpenGL 21】 -《聚光灯光源》
    Images.xcassets 的简单使用
    网易 2016 实习研发project师 3道 编程题
  • 原文地址:https://www.cnblogs.com/sameen/p/6143470.html
Copyright © 2011-2022 走看看