REST web服务-学习笔记

来源:互联网 发布:arp攻击 c语言 编辑:程序博客网 时间:2024/06/07 18:25

REST web服务-学习笔记

@[Restful, webservice, web服务]

  • REST web服务-学习笔记
    • 关于web的几个基础
    • REST介绍
      • HTTP方法操作资源
      • 无状态服务
    • 为什么要使用REST web服务
    • REST web服务适用场景
    • 参考

关于web的几个基础


    URI(统一资源标识符,用来标识资源)


    HTTP(超文本传输/转移协议,用来操作资源


    Hypertext(超文本,用来描述资源的内容与状态,我们可以用HTML、XML、JSON或者自定义格式的文本来描述任何一个资源)

REST介绍

表现层状态转移(Representational State Transfer,REST)
???这什么意思,通俗解释:
资源以某种表现形式进行状态转移
- Resource:资源,即数据,例如图片、文档等
- Representational:某种表现形式,比如用JSON,XML等;
- State Transfer:状态变化。通过HTTP方法(GET、PUT、POST、DELETE)实现

REST并不是一种新兴的技术语言,也不是什么新的技术框架。准确来说REST只是一种概念、风格或者约束,是回归HTTP本身的建议。

RESTful 服务是轻量级web服务,应该遵循基本设计原则:
- 每个资源对应一个唯一的资源标识符
- 使用标准的HTTP方法来对资源进行操作
- 无状态的服务
- 资源多重表述,一个URI标识一个资源,但是一个资源可以被多个URI标识

HTTP方法操作资源

REST 要求使用标准 HTTP 方法,并且使用方式与协议定义一致。 这个基本 REST 设计原则建立了创建、读取、更新和删除(create, read, update, and delete,CRUD)操作与 HTTP 方法之间的一对一映射。 根据此映射:
- 若要在服务器上创建资源,应该使用 POST 方法。
- 若要检索某个资源,应该使用 GET 方法。
- 若要更改资源状态或对其进行更新,应该使用 PUT 方法。
- 若要删除某个资源,应该使用 DELETE 方法。

Alt text

在服务端API的设计中,URL中只使用名词来指定资源,原则上不使用动词。保证 GET 方法是安全的,不会对资源状态有所改变。如杜绝如下情况:
GET /deleteProduct?id=1
同时,RESTful风格推荐使用目录式的嵌套结构,比如http://www.myservice.org/discussion/topics/{topic}

无状态服务

首先,需要着重强调的是,虽然REST包含无状态性(statelessness)的观念,但这并不是说暴露功能的应用不能有状态——事实上,在大部分情况下这会导致整个做法没有任何用处。REST要求状态要么被放入资源状态中,要么保存在客户端上。从客户端的每个请求要包含服务器所需要的所有信息。这样做的最直接的理由就是可伸缩性—— 如果服务器需要保持客户端状态,那么大量的客户端交互会严重影响服务器的内存可用空间。

但除此以外,其它方面可能显得更为重要:无状态约束使服务器的变化对客户端是不可见的,因为在两次连续的请求中,客户端并不依赖于同一台服务器。一个客户端从某台服务器上收到一份包含链接的文档,当它要做一些处理时,这台服务器宕掉了,可能是硬盘坏掉而被拿去修理,可能是软件需要升级重启——如果这个客户端访问了从这台服务器接收的链接,它不会察觉到后台的服务器已经改变了。

为什么要使用REST web服务

  1. 客户-服务器(Client-Server)客户端服务器分离
  2. 无状态
  3. 缓存(Cachable) 关于这个一点lz也不懂,后面补充吧,或者哪位详解一下呀
  4. ……
    这里lz还不太理解,请大家参考 https://www.zhihu.com/question/28557115

REST web服务适用场景

REST最适合的应用场景其实是需要对外暴露服务的时候,我们可以充分利用REST的自描述、无状态、唯一标识等特性来提供清晰、友好的API。

参考

https://www.zhihu.com/question/28557115
https://www.ibm.com/developerworks/cn/webservices/ws-restful/
http://blog.csdn.net/lfsfxy9/article/details/9205337

0 0
原创粉丝点击