LenonardRichardson 是非常有名的四个层次定义,层次从0到3.这样设计就是Web API的“RESTfulness”的层次。每一级都会有额外工作和时间的API,但它确是提供有效的方式。

1. Level 0 – HTTP

第零级是很容易到达的,当你在通过HTTP协议去访问网络时,你要确保你的请求资源是有效的。你可以应用任何的数据代理去找到你例子中适合的信息,如xml、JSON等。

2. Level 1 – HTTP

大多数人听到REST的时候,就会认为是一种资源。这种资源在我们的模型当中是唯一性的,例如,一个用户或一个tweet信息。运用HTTP,这个资源是跟唯一的URI地址是的关系的。例如下面的例子:

1)        /users 包含所有用户的列表

2)        /user/42 包含特殊的用户

3)        /user/42/tweets 包含所有的tweets是跟指定的用户是有关系的。

可能我们的API需要访问特殊的tweet用户,使用/user/42/tweet/3或可能每个tweet都是唯一的。在这个例子中,可能你更喜欢/tweet/3.

Level1就是去解决更为复杂的应用程序通过这个多个特殊的资源。

当服务器返回时,关于响应是没有更多的规则。当你应用/users的资源列表时,你可能想要获取包含特殊资源,或者在请求时可以给出更多详细的资源。在你获取请求之前,API经常会返回一些你感兴趣的信息。

它可以真正的让你达到去定义 自己API的目标,给你的用户展示他们希望的API模型。

3. Level 2 – HTTP verbs

这个级别是关于运用HTTP的语言去定义有效的资源作用。这个是一个非常有用的方式去描述你的API的作用,尤其是通过HTTP的语言让所有开发人知道你API的标准。下面是主要的词语:

1)        GET:这个是用特殊的URI地址来读取数据

2)        HEAD:这个是跟GET的作用是相同的,但是却没有消息体。这个对于无数据的获取是非常有用的(像缓存信息等)。

3)        DELETE:这个是删除资源

4)        PUT:这个是更新和创建意资源

5)        POST:这个是创建和更新资源

6)        PATCH:主要用于更新资源

7)        OPTIONS:返回列表的方法用于服务提供特殊的资源

大多数的应用的操作都是增删改查(CRUD),而仅仅涉及到的词语是:GET、DELETE和POST。更多的词语是从你的丰富和动态的API中继承的。它可以帮助第三方与你的服务有关系,通过允许它们输入一些命令和看发生了什么。

OPTIONS和HEAD的词语可以看到无数所或系统在危险状态下的工作情况。

在上面,我们已经说了,PUT和POST显示出相同的作用。不同的是,PUT是一种等幂的,意思是在不同时间点发送同一个请求,但是返回的却是同一个服务器状态。PUT操作需要通过URI地址,而且请求时是有多足够的信息。

例如,客户端运用PUT的数据在/user/42,和返回的结果将会是更新的创造,这个取决于存在实体的优先级。

另外一方面,当你不明确你的URI地址时,你需要运用POST。你可以用POST到/users,但却没有特殊的ID在你自己的请求中,结果user也会被创建。你也可以用POST去请求相同的/users资源,这个时候user的ID号将会包含在你请求的实体中,和服务也会去更新user.

就像你所看到的,POST和PUT的作用,其实PUT的请求地址中会包含请求时所用的参数。而POST中是没有的。

服务器可能允许资源被修改,这个时候就会用PATCH。

在这个级别中,我还是鼓励你用有意思的HTTP的编码号当你发出响应时。

4. Level 3 – Hypermedia controls

超媒体控制也被称为超文本的应用程序引擎状态(HATEOAS).这个缩写是是RESTful服务的重要的部分:它可以通过超文本来显示出来。从本质上来说,服务器端会告诉客户端通过响应头和响应体作出怎样的选择。

此外,当我们创建资源用PUT时,服务器需要返回201CREATED的编码消息和发送Location消息头,其中包括URI的创建资源。

连接到API的部分是我们所要看到的,但是这样的定义是没有标准。Spring Data REST ,一个Sping 工程允许我们去创建RESTful的结构,典型的输出如下:

去访问/users的格式如下:

This gives you a good idea of what you can do with the API, doesn't it?

成熟的Richardson模型相关推荐

  1. 目前效果最好、应用较广且比较成熟的语音识别模型是什么?

    谢邀 ------------------ 首选是CTC,这里有一篇文章写的很好,很细致,可以学习一下,附上原文链接:https://xiaodu.io/ctc-explained/​xiaodu.i ...

  2. 怎么成为优秀的软件模型设计者?

    作者:Scott Ambler著,乐林峰 译 本文选自:www.umlchina.com 2002年03月25日 我们期待自己成为一个优秀的软件模型设计者,但是,要怎样做,又从哪里开始呢? 将下列原则 ...

  3. 【杂谈】关于数据和模型,初学者极容易忽视的两个问题!

    说起深度学习与CNN,想必大家很熟悉:说起计算机视觉中的目标检测等各个方向,相比大家平时也接触过不少东西了:不过有两个小的方向,虽然相关的论文.项目.甚至研究方法都不多,却是做研究与实际项目落地中非常 ...

  4. 在深度学习顶会ICLR 2020上,Transformer模型有什么新进展?

    一只小狐狸带你解锁炼丹术&NLP秘籍 大数据文摘出品 来源:medium 编译:一一.Andy ICLR是机器学习社群最喜爱的会议平台之一.如今,机器学习领域的会议已成为预印本里论文质量的标志 ...

  5. 水环境模型与大数据技术融合研究

    点击上方蓝字关注我们 水环境模型与大数据技术融合研究 马金锋1, 饶凯锋1, 李若男1,2, 张京1, 郑华1,2 1 中国科学院生态环境研究中心城市与区域生态国家重点实验室,北京 100085 2  ...

  6. 怎样成为优秀的软件模型设计者

    我们期待自己成为一个优秀的软件模型设计者,但是,要怎样做,又从哪里开始呢? 将下列原则应用到你的软件工程中,你会获得立杆见影的成果. 1. 人远比技术重要 你开发软件是为了供别人使用,没有人使用的软件 ...

  7. 【转】怎样成为优秀的软件模型设计者(文末提供下载)

    我们期待自己成为一个优秀的软件模型设计者,但是,要怎样做,又从哪里开始呢? 将下列原则应用到你的软件工程中,你会获得立杆见影的成果. 1. 人远比技术重要 你开发软件是为了供别人使用,没有人使用的软件 ...

  8. 优秀!腾讯AI Lab开源模型压缩与加速框架PocketFlow!

    点击我爱计算机视觉标星,更快获取CVML新技术 PocketFlow,成熟高效的模型压缩与加速框架,经过腾讯内部AI技术商用实践检验,你值得拥有- 以下内容来自腾讯AI实验室(tencent_aila ...

  9. 详解视频中动作识别模型与代码实践

    摘要:本案例将为大家介绍视频动作识别领域的经典模型并进行代码实践. 本文分享自华为云社区<视频动作识别>,作者:HWCloudAI.实验目标 通过本案例的学习: 掌握 C3D 模型训练和模 ...

  10. 项目:金融行业反欺诈模型

    当今以互联网.移动终端等为代表的技术力量正深刻地影响着金融支付市场,信息化.网络化.无线终端等技术的应用,使金融机构特别是银行业的经营发生了天翻地覆的变化,传统的银行柜台和网点业务,正渐渐被电子化交易 ...

最新文章

  1. 埃森哲、亚马逊和万事达卡抱团推出的区块链项目有何神通?
  2. CentOS 6 时间,时区,设置修改及时间同步
  3. Spring Boot与Activiti集成实战
  4. 数据结构与算法之美-哈希算法
  5. LeetCode刷题实战(13):Roman to Integer
  6. php表单 提交数据,PHP表单提交数据
  7. 别乱用,这样打日志定位 Bug 又快又准!
  8. 【转】两厢车与三厢车安全性哪个好?
  9. java实验的总结_Java实验总结——初学(上)
  10. 研究解决CLOB字段IO问题的方法
  11. linux中ifi_info的英文全称,【DNS服务器IP地址-域名注册查询-CDN加速技术】
  12. 软件项目开发与管理(单代号网络图参考例题)
  13. 一、万用表使用方法图解
  14. @人生随笔:一年一影帝,百年周星驰
  15. k8s对外攻击面总结
  16. oracle 结果集已耗尽_java.sql.SQLException: 结果集已耗尽,解决方法!
  17. Android Vendor Test Suite (VTS) 的概念、作用及测试方法
  18. 复制百度文库文字收费内容
  19. signature=4c7f5ea5ee6ba300a8851e5bd937b405,拦截到崩溃scrollViewContainer 错误
  20. 我使用pangu模块做了一个文本格式化小工具!

热门文章

  1. 2016-6-4 项目结构调整完成
  2. [翻译]利用C#获取终端服务(Terminal Services)会话的闲置时间
  3. “我爱淘”冲刺阶段Scrum站立会议3
  4. shell oracle 多进程,Shell多进程实现
  5. 九、K8s deployment相关操作
  6. OSPF NSSA区域路由的计算过程与FA值实验
  7. VXLAN详解(三)
  8. 括号匹配问题(九度教程第 26 题)
  9. Window 浏览器窗口对象
  10. mysql unrecognized service问题解决