`
rainy646556896
  • 浏览: 20491 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Restful Web APIs简介

 
阅读更多

Restful Web APIs: 
概念: 

  • 资源:我们所说的URL是一些事物的URL, 比如一个产品,用户或主页。这些通过URL命名的事物叫资源。 
  • 资源的表述:web浏览器为一个资源发送http请求后,服务器会发送一个文档作为响应(通常是一个HTML文档,但有时候是二进制图片或其它东西)。无论服务器发送了什么文档,我们都将这个文档称为资源的表述。 
  • 可寻址性: 每个资源应该有一个属于自己的URL。 
  • 短会话: HTTP会话只维持在一次请求过程中,客户端发送请求,服务器进行响应。 
  • 应用状态: REST里,我们将所停留在哪个特定的页面,称为应用状态。 
  • 资源状态: 服务器中存储着各种资源,这些资源的状态就叫做资源状态。GET方法不会改变资源状态。 
  • 幂等性(idempotence): Delete一个资源后,这个资源就消失了,当再次发送delete请求时,可能会收到响应404,但是资源状态和第一次delete 
  • 资源后的一致。 


HTTP GET方法: 意思是告诉服务器"把这个资源的表述提供给我" 
HTTP response分为3部分: 

  1. 状态码; 
  2. 消息体; 
  3. 响应报头。重要的报头是Context-Type,它向客户端说明了如何去理解实体消息体,我们将其值称为实体消息体的媒体类型。常见类型有text/html(针对HTML),以及图片类型image/jpeg。application/json: 将约束建立在普通文本之上;application/vnd.collection+json:将约束建立在JSON之上,遵守Collection + Json的约束,是一种描述http资源的列表,例如:

        {

     "collection": {

"href": "http://www.youtypeitwepostit.com/api/"

     }

         }      

 

curl命令:
curl -H "Context-Type:application/vnd.collection+json" -d "{"template":{"data":[{"prompt":"Text of message","name":"text","value":"squid"}]}}" 


HTTP Method

  • GET:  请求一个资源的表述,是一个安全的HTTP method。 
  • DELETE: 删除一个资源,是一个不安全的HTTP method. 
  • POST: 1> POST-to-append 向某个资源发送一条POST请求用以在该资源的下一集中创建新的资源。当客户端发送一个POST-to-append请求时,会在实体消息体中添加希望创建的资源的表述信息并发送给服务器,响应201(created:创建成功)或202(Accept:打算创建但还未创建);POST方法既不安全也不幂等,例如如发送同样的POST请求,则会创建5个内容相同的资源。 
  • PUT: 1> 修改一个资源。修改成功后的响应:200(OK)或204(No Content)状态码。 2> 如果客户端知道新资源的URL的话,PUT方法同样可以用来新建一个资源。 PUT请求也是幂等性的,既发送10次同样的PUT请求,和发送一次是一样的(就算是用来新建资源,也是幂等的,和POST请求不同的是,就算多次发送PUT请求,也只会创建一个资源)。 
  • PATCH: PATCH方法允许客户端可以只修改资源状态中很小的一部分,和将完整的表述信息通过PUT请求发送出去不同,你可以建立一个特别的"diff"表述,并将它作为PATCH请求的负载数据发送个服务器。 响应:如果服务器想要向客户端发送数据(比如已经更新资源的表述),那么200是最好的选择;若服务器仅仅想要表述执行已经成功,那么204(No Content)就已经足够。PATCH方法既不保证安全,也不幂等。 
  • LINK和UNLIKE: 用于管理资源间的超媒体链接。幂等,但不安全。 
  • HEAD: 轻量级版本的GET方法,服务器会像处理GET一样处理HEAD方法,但不需要发送实体消息体,只需发送HTTP状态码和报头。 用此方法替代GET不会节约时间(服务器还是需要生成所有的HTTP报头),但可以节约带宽的使用。 
  • OPTIONS: 请求的返回包含一个Allow报头,这个报头展示了这个资源所支持的所有method。(该方法无法理解PATCH,LINK和UNLINK方法)。

设计良好的API会为GET请求发送超媒体文档作为响应,并用这个文档来宣传一个资源的功能。这些文档中的链接和表单阐明了客户端下一步所能发起的HTTP请求。而设计低劣的API,使用人类可读的文档来说明客户端能发起哪种HTTP请求。 


HTML文档的协议语义只支持GET和POST方法。 


REST系统:服务器、客户端、缓存、代理、缓存代理等。 


常见的HTML控件允许服务器可以向客户端描述如下4中类型的HTML请求:

  1. <a>标签描述一个针对特定URL的GET请求,该请求只会在用户触发控件时产生; 
  2. <img>标签描述了一个针对特定URL的GET请求,它将会在后台自动发起; 
  3. 拥有method="POST"属性的<form>标签描述了一个针对特定URL的POST请求,该请求将会拥有一个由客户端构造的实体消息体。该请求只会在用户触发控件时产生。 
  4. 拥有method="GET"属性的<form>标签描述了一个针对由客户端构造的自定义URL的GET请求。该请求只会在用户触发控件时产生。 


HTML表单 VS URI模板: 
HTML超媒体控件无法告诉浏览器如何创建一个像http://www.youtypeitwepostit.com/search/rest这样的URL。但另一种超媒体技术-URI模板可以做到。 
URI模板: http://www.youtypeitwepostit.com/search/{search} 
http://www.youtypeitwepostit.com/message/?query={query} 
HTML表单: 
<form method="GET" action="http://www.youtypeitwepostit.com/message/"> 
<input type="text" id="query" name="query" /> 
<input type="submit" name="Search"> 
</form> 


URIs, URLs, and URNs: 
首先,URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。而URL是uniform resource locator,统一资源定位器,它是一种具体的URI, 
即URL可以用来标识一个资源,而且还指明了如何locate这个资源。而URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如mailto:java-net@java.sun.com。 
也就是说,URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI。 


HTTP请求:方法、目标URL、HTTP报头和实体消息体

分享到:
评论

相关推荐

    Metamorphic-Testing-of-RESTful-Web-APIs.pdf

    Metamorphic Testing of RESTful Web APIs Metamorphic Testing 是一种测试技术,旨在通过改变输入数据或环境来观察软件系统的行为变化,从而判断其正确性。RESTful Web APIs 是一种基于 Representational State of...

    RESTful Web APIs英文版

    《RESTful Web APIs》是针对RESTful API的实用指南,通过展示各种用来创建高可用应用的强大工具,讲解REST的深层原理,以及介绍基于超媒体API的策略,使读者得以在将上述内容融会贯通后,设计出让客户高度满意的...

    [RESTful Web] RESTful Web APIs 英文版

    [奥莱理] RESTful Web APIs 英文版 [奥莱理] RESTful Web APIs E Book ☆ 图书概要:☆ The popularity of REST in recent years has led to tremendous growth in almost RESTful APIs that don’t include ...

    RESTful Web APIs - Richardson, Leonard & Amundsen, Mike & Ruby, Sam.mobi

    RESTful Web APIs - Richardson, Leonard & Amundsen, Mike & Ruby, Sam.mobi

    RESTful Web APIs.pdf

    You’ll explore the concepts behind REST, learn different strategies for creating hypermedia-based APIs, and then put everything together with a step-by-step guide to designing a RESTful Web API.

    Restlet in Action Developing RESTful web APIs in Java 无水印pdf

    Restlet in Action Developing RESTful web APIs in Java 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自...

    RESTful Web Services 中文版 高清 PDF 电子书

    根据提供的文件信息,我们可以提炼出关于RESTful Web Services的关键知识点: RESTful Web Services概念:RESTful Web Services是一种基于Web的架构风格和设计模式,用于构建可扩展和灵活的网络应用。REST即表现层...

    RESTful Web APls中文版.pdf.zip

    本资源“RESTful Web APls中文版.pdf.zip”包含了一本详细阐述RESTful API设计和实现的中文版电子书,适合对RESTful API感兴趣的开发者阅读。这本书将帮助读者深入理解RESTful架构原则,掌握如何创建高效、可扩展且...

    RESTful Web Service Demo

    总的来说,"RESTful Web Service Demo"项目是一个实践性的教程,它向我们展示了如何使用Java和Spring Boot来创建一个支持CRUD操作的RESTful服务,这在现代Web开发中是非常常见的需求。通过学习和实践这个示例,...

    building restful web services with spring 5 2e

    Building RESTful Web Services with Spring 5 – Second Edition: Leverage the power of Spring 5.0, Java SE 9, and Spring Boot 2.0 Find out how to implement the REST architecture to build resilient ...

    Building RESTful Web services with Go

    Building RESTful Web services with Go pdf Book Description REST is an architectural style that tackles the challenges of building scalable web services and in today's connected world, APIs have taken ...

    Django RESTful Web Services-Packt Publishing(2018)

    This book is for Python developers who want to develop RESTful Web Services, also known as RESTful web APIs, with Python 3.6 or greater, and want to learn how to do it with the most popular Python web...

    Api-securing-restful-apis-with-jwt.zip

    Api-securing-restful-apis-with-jwt.zip,如何使用json web令牌保护nodejs restful crud api?用jwt保护restfulapi,一个api可以被认为是多个软件设备之间通信的指导手册。例如,api可用于web应用程序之间的数据库...

    Building.RESTful.Python.Web.Services.epub

    web service Debug, test, and profile RESTful APIs with each of the frameworks Develop a complex RESTful API that interacts with a PostgreSQL database Add authentication and permissions to a RESTful ...

Global site tag (gtag.js) - Google Analytics