晴明的博客园 GitHub      CodePen      CodeWars     

[http] RESTful API 、 OAuth

#

RESTful API

 

常用的HTTP动词(括号里对应SQL命令)。

        GET(SELECT):从服务器取出资源(一项或多项)。
        POST(CREATE):在服务器新建一个资源。
        PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
        PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
        DELETE(DELETE):从服务器删除资源。
        
有两个不常用的HTTP动词。

        HEAD:获取资源的元数据。
        OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。

status code (状态码):

        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 /zoos:列出所有动物园
        POST /zoos:新建一个动物园
        GET /zoos/ID:获取某个指定动物园的信息
        PUT /zoos/ID:更新某个指定动物园的信息(提供该动物园的全部信息)
        PATCH /zoos/ID:更新某个指定动物园的信息(提供该动物园的部分信息)
        DELETE /zoos/ID:删除某个动物园
        GET /zoos/ID/animals:列出某个指定动物园的所有动物
        DELETE /zoos/ID/animals/ID:删除某个指定动物园的指定动物

一些常见的参数。

        ?limit=10:指定返回记录的数量
        ?offset=10:指定返回记录的开始位置。
        ?page=2&per_page=100:指定第几页,以及每页的记录数。
        ?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。
        ?animal_type_id=1:指定筛选条件

返回的结果应该符合以下规范。

        GET /collection:返回资源对象的列表(数组)
        GET /collection/resource:返回单个资源对象
        POST /collection:返回新生成的资源对象
        PUT /collection/resource:返回完整的资源对象
        PATCH /collection/resource:返回完整的资源对象
        DELETE /collection/resource:返回一个空文档
        
       

HTTP请求方法在RESTful API中的典型应用:

1
资源:

一组资源的URI,比如http://example.com/resources/    

GET:    

列出URI,以及该资源组中每个资源的详细信息(后者可选)。

PUT:   

使用给定的一组资源替换当前整组资源。

POST:  

在本组资源中创建/追加一个新的资源。该操作往往返回新资源的URL。

DELETE:
删除整组资源。

2

资源:

单个资源的URI,比如http://example.com/resources/142 

GET:    

获取指定的资源的详细信息,格式可以自选一个合适的网络媒体类型(比如:XML、JSON等)

PUT:   

替换/创建指定的资源。并将其追加到相应的资源组中。

POST:  

把指定的资源当做一个资源组,并在其下创建/追加一个新的元素,使其隶属于当前资源。

DELETE:
删除指定的元素。

 

 

OAuth

 

 

    (A)用户打开客户端以后,客户端要求用户给予授权。
    (B)用户同意给予客户端授权。
    (C)客户端使用上一步获得的授权,向认证服务器申请令牌。
    (D)认证服务器对客户端进行认证以后,确认无误,同意发放令牌。
    (E)客户端使用令牌,向资源服务器申请获取资源。
    (F)资源服务器确认令牌无误,同意向客户端开放资源。

 

客户端必须得到用户的授权(authorization grant),才能获得令牌(access token)。
OAuth 2.0定义了四种授权方式。

    授权码模式(authorization code)
    简化模式(implicit)
    密码模式(resource owner password credentials)
    客户端模式(client credentials)

 

posted @ 2016-06-24 17:42  晴明桑  阅读(395)  评论(0编辑  收藏  举报