美文网首页Erlang
Restful web Services ----第一章笔记

Restful web Services ----第一章笔记

作者: BoboChen | 来源:发表于2015-05-08 13:36 被阅读139次

    REST(表述性状态转移)

    HTTP 的设计 目标是在客户端和服务器之间对库、服务器、代理、缓存和其他工具的可见性。可见性是:一个组件能够对其他两个组件之间的交互进行监视或仲裁的能力。当协议是可见的时,缓存、代理、防火墙等组件既可以监视甚至参与其中。

    HTTP 通过以下途径来实现可见性:

    • HTTP的交互是无状态的,任何HTTP中介都可以推断出给定请求和响应的意义,而无须关联过去或将来的请求和响应。
    • HTTP使用一个统一接口,包括有OPTIONS,GET,HEAD,POST,DELETE和TRACE方法。接口中的每一个方 法操作一个且仅有一个资源。每个方法的语法和含义不会因应用程序或资源的不同而发生改变。
    • HTTP使用一种与MIME类似的信封格式进行表述编码。这个格式明确区分标头和内容。

    一个HTTP请求的格式:
    请求行:HTTP方法 资源路径 HTTP版本
    请求的表述形式表头:Content-Type:...
    请求的表述内容

    POST /api/bookclubserver/note/comment_text/put HTTP/1.1\r\n
    User-Agent: curl/7.35.0\r\n
    Host: localhost:8080\r\n
    Accept: */*\r\n
    content-type: application/json\r\n
    Content-Length: 157\r\n\r\n
    { \"note_id\":\"201505080931476889\",\"user_id\":\"201504171121428216\",\"note_comment_content\":\"Is luck to meet you!\",\"p_note_comment_id\":\"-1\",\"p_note_user_id\":\"-1\"}
    

    一个HTTP响应的格式:
    响应行:HTTP版本 状态码 状态消息
    响应的表述形式标头:
    响应的表述内容

    HTTP/1.1 200 OK
    connection: keep-alive
    server: Cowboy
    date: Fri, 08 May 2015 01:43:11 GMT
    content-length: 61
    content-type: text/html
    {"return_code":0,"status":[],"comment_id":201505080943113579}
    

    对于RESTful 服务,主要目标必定是尽最大可能保持可见性:使用HTTP方法时,其语义要与HTTP所规定的语义保持一致,并添加适当的标头来描述请求和响应;另一方面是使用适当的状态码和状态消息,以便代理、缓存和客户端可以决定请求的结果,状态码是一个整数,状态消息是文本。

    降低可见性原因:
    -数据的重叠

    为了其他好处放弃可见性:
    -方便客户端:为了方便客户端使用,服务器可能需要设计特定目标的粗粒度组件资源
    -抽象
    -网络效率:当客户端需要在短时间内连续执行几个操作时,可能需要将这些操作组合到一个批处理中,以降低网络延迟。

    如何在服务器端实现安全和幂等的方法

    实现GET/OPTION/HEAD方法时,不要引起任何副作用。当客户端重新提交一个GET/HEAD/OPTIONS/PUT或DELETE请求时,确保服务器提供同样的表述形式:


    http_method.png
    实现安全方法

    为了保证安全方法不会引起副作用,可以将安全方法实现为只读操作:即客户端发起请求时,不会改变资源的状态。

    幂等方法

    幂等性保证客户端重复发起某个请求的效果与一次请求的效果一致。除POST以外的所有方法都必须是幂等的。在编程语言的术语中,幂等方法类似于setter

    DELETE方法的幂等性

    DELETE方法是幂等的。这意味着就算服务器在前一个请求中已经删除了资源,它也必须返回200 (OK)响应码

    如何在客户端吹安全和幂等方法

    安全方法

    把GET/OPTIONS/HEAD看做只读操作,需要时,可以随时发起这些请求。

    幂等方法

    幂等性保证了客户端可以在不能肯定服务器是否成功处理了请求时,重复发起这一请求。在HTTP中,除了POST以外的所有方法都是幂等的。

    何时使用GET方法

    使用 GET方法进行安全与幂等的信息获取。不要把GET方法用于不安全或非幂等操作,因为这样做可能会造成永久性的、意想不到的、不符合需要的资源改变。

    何时使用POST方法

    • 创建新的资源。
    • 通过一个控制器资源来修改一个或多个资源
    • 执行需要大数据输入的查询
    • 在其他HTTP方法看上去不合适时,执行不安全或非幂等的操作。

    何时使用PUT方法创建新资源

    只有在客户端可以决定资源的URi时才使用PUT方法创建新资源,否则使用POST.举个例子,一台存储服务器可能为每个客户端分配一个根URL,并让客户端把根URI作为文件系统的根目录,以便创建新资源,如果不能控制URI,请使用POST方法

    如何使用POST方法实现异步任务

    HTTP是一种同步、无状态的协议。当客户端向服务器提交一个请求时,无论成功与否,客户端都期望得到一个回答。
    在接收到POST请求时,创建一个新的资源,并返回状态码202,其包含新资源的表述,这个新资源目的是让客户端可以跟踪异步任务的状态。

    相关文章

      网友评论

        本文标题:Restful web Services ----第一章笔记

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