• restful架构风格设计准则(二)以资源为中心,一个url


    读书笔记,原文链接:http://www.cnblogs.com/loveis715/p/4669091.html,感谢作者!

    1、REST是一种架构风格,其核心是面向资源,简化设计,降低开发的复杂性,提高系统的可伸缩性。

         REST设计概念和准则为:

           a、网络上的所有事物都可以被抽象为资源,通过统一资源标识符(URI)来识别和定位资源。每个资源都有唯一的资源标识,对资源的操作不会改变这些标识

           b、REST设计架构遵循CRUD原则,针对这些资源执行的操作使用请求方法,如:
               ◆POST: 创建

               ◆GET: 读取 

               ◆PUT: 更新 

               ◆DELETE: 删除

            c、所有的操作都是无状态的,没有上下文的约束。

        这样如果做分布式、集群就不需要考虑上下文和会话保持的问题,可以极大的提高系统的可伸缩性。 

    2、一个实际的REST例子:

        REST架构下,一个 Web 应用总是使用固定的 URI 表示一个资源,

        我们来看一个实际例子:

              http://www.example.com/photo/logo

              指向 example.com 网站(Web应用)中类型为 photo,名字为 logo 的资源。

              我们用浏览器访问这个URI,看到的将可能是一个 xhtml 文档,或一个xml,或者一个图片。

         事实上,这个地址很可能会在服务器内部处理为 http://www.example.com/photo.do?name=logo 这样的地址。

         photo.do 是服务器端的一个action,根据 name 参数生成 xhtml 文档返回给浏览器。

         现在假设我们要获取这张照片的 XML 文档。XML 文档中包含照片的文件名、文件大小、拍摄日期等等信息。

         也就是说我们要获取“同一个资源的不同表现形式的数据”。 

         错误的实现方式:

            对于这个要求,我们可以很容易的用另一个 URL 地址达到:http://www.example.com/xml/logo。

            但是,这就违背了“URI 唯一标识一个资源”的定义。如果我们要获取同一个资源的多种表现形式,那么就要使用更多的 URL,从而给一个资源指定了多个不同的 URI。

            而在 REST 中,不管是获取照片的 xhtml 文档还是 XML 文档,或者照片文件本身,都是用同一个 URI,就是 http://www.example.com/photo/logo。     

         正确的实现方式:

            那这是怎么办到的呢?

            我们可以通过HTTP Request Header 信息来区分客户端是想要取得资源的哪一种表现形式的数据。

            当我们用浏览器访问一个网址时,浏览器会构造一个 HTTP 请求。这个请求有一个头信息,其中包括了本次请求接受何种类型的数据。

            通常浏览器发送的 HTTP 请求头中,Accept 的值都是 */*,也就说接受服务器返回的任何类型的数据。

            所以,只要我们指定一个特定的 Accept 参数,服务器就可以通过判断该参数来决定返回什么类型的数据。

            所以在一个采用 REST 架构的应用中,要获取同一个资源的不同表现形式的数据,只需要使用不同的 HTTP 请求头信息就行了。   

            再如:

                  一段文字,可以用txt去表现,也可以用 html、xml、json表示。

                  一张图片,有jpg、png、gif格式。

                  我们把一种资源具体呈现出来的形式叫表现层。 

    3、一个应用场景:

         如果考虑为一个 Web 应用增加 Web Services,这种技术的价值就体现出来了。

         比如我写了一个 Delphi 程序,现在只需要构造一个包含 Accept: text/xml 的 HTTP 请求头,然后将请求发送到 http://www.example.com/photo/logo 就可以了。

         返回的结果就是一个 XML 文档,而不是 xhtml 文档。 

    4、更完整的REST架构例子

         REST 架构用不同的 HTTP 请求方法来处理对资源的 CRUD(创建、读取、更新和删除)操作。 对一个资源的 CRUD 操作就可以通过同一个 URI 完成,如:
         http://www.example.com/photo/logo(读取) 仍然保持为 [GET] http://www.example.com/photo/logo

         http://www.example.com/photo/logo/create(创建) 改为 [POST] http://www.example.com/photo/logo

         http://www.example.com/photo/logo/update(更新) 改为 [PUT] http://www.example.com/photo/logo

         http://www.example.com/photo/logo/delete(删除) 改为 [DELETE] http://www.example.com/photo/logo

         通过 REST 架构,Web 应用程序可以用一致的接口(URI)暴露资源给外部世界,并提供对资源的操作服务。

         这对于以资源为中心的 Web 应用来说非常重要。例如照片共享网站、用户社区等。

  • 相关阅读:
    SQL Server中 @@IDENTITY, SCOPE_IDENTITY, IDENT_CURRENT的比较
    xslt函数扩展之使用自定义函数(C#,VB,JavaScript)
    SQL Server DATEPART() 、Datediff()、Year()、month()、Day()函数的用法解析
    关于JAVA设置新生代内存顶住了开服压力这件事
    使用 wget 发送 http 请求
    解决Chrome无法访问使用HSTS的网址
    CSV 文件拼接
    Coursera Programming Languages, Part A 华盛顿大学 Week 1
    Coursera Programming Languages, Part A 华盛顿大学 Week 2
    display:flex;弹性布局详解
  • 原文地址:https://www.cnblogs.com/lexiaofei/p/6564868.html
Copyright © 2020-2023  润新知