• REST API


    准备用一个简单的列子来描述什么是Representation,什么是State,以及什么是Representation State Transfer。

    例如我订阅了一个人的博客,想要获取他发表的所有文章(这里『他发表的所有文章』就是一个资源Resource)。于是我就向他的服务发出请求,说『我要获取你发表的所有文章,最好是atom格式的』,这时候服务器向你返回了atom格式的文章列表第一页(这里『atom格式的文章列表』就是表征Representation)。你看到了第一页的页尾,想要看第二页,这时候有趣的事情就来了。如果服务器记录了应用的状态(stateful),那么你只要向服务询问『我要看下一页』,那么服务器自然就会返回第二页。类似的,如果你当前在第二页,想服务器请求『我要看下一页』,那就会得到第三页。但是REST的服务器恰恰是无状态的(stateless),服务器并没有保持你当前处于第几页,也就无法响应『下一页』这种具有状态性质的请求。因此客户端需要去维护当前应用的状态(application state),也就是『如何获取下一页资源』。当然,『下一页资源』的业务逻辑必然是由服务端来提供。服务器在文章列表的atom表征中加入一个URI超链接(hyper link),指向下一页文章列表对应的资源。客户端就可以使用统一接口(Uniform Interface)的方式,从这个URI中获取到他想要的下一页文章列表资源。上面的『能够进入下一页』就是应用的状态(State)。服务器把『能够进入下一页』这个状态以atom表征形式传输(Transfer)给客户端就是表征状态传输(REpresentational State Transfer)这个概念。

    举个具体API的例子:
    请求:
    GET /posts HTTP/1.1
    Accept: application/atom+xml
    
    响应:
    HTTP/1.1 200 OK
    Content-Type: application/atom+xml
    
    <?xml version="1.0" encoding="utf-8"?>
    <feed xmlns="http://www.w3.org/2005/Atom">
        <title>Posts</title>
        <link href="http://example.org/posts" rel="self" />
        <link href="http://example.org/posts?pn=2" rel="next" />
    
        <id>urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6</id>
        <updated>2003-12-13T18:30:02Z</updated>
        <entry>
            <title>Post XXX</title>
            <link href="http://example.org/post-xxx" />
            <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
            <updated>2003-12-13T18:30:02Z</updated>
            <content type="xhtml">
                <div xmlns="http://www.w3.org/1999/xhtml">
                    <p>This is the post content.</p>
                </div>
            </content>
        </entry>
        <entry>...</entry>
    </feed>
    
    注意上面atom格式中的多个<link>元素,它们分别定义了当前状态下合法的状态转移。


    作者:季文昊
    链接:http://www.zhihu.com/question/28557115/answer/48120528
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    [转]线上GC故障解决过程记录
    [转]JVM性能调优监控工具
    [转]JVM运行时内存结构
    根据PV量来确定需要进行压测的并发量
    rsync文件同步、Inotify-tools参数详解
    keepalived双BACKUP加nopreempt失效、手动监控服务脚步。
    oracle 死锁和锁等待的区别
    [转]查看处于被锁状态的表:v$locked_object dba_objects v$session all_objects v$sqlarea v$lock
    v$Session详解
    window用Xmanager4.0的Xstart连接linux远程桌面
  • 原文地址:https://www.cnblogs.com/double12gzh/p/10166190.html
Copyright © 2020-2023  润新知