成熟的Richardson模型
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模型相关推荐
- 目前效果最好、应用较广且比较成熟的语音识别模型是什么?
谢邀 ------------------ 首选是CTC,这里有一篇文章写的很好,很细致,可以学习一下,附上原文链接:https://xiaodu.io/ctc-explained/xiaodu.i ...
- 怎么成为优秀的软件模型设计者?
作者:Scott Ambler著,乐林峰 译 本文选自:www.umlchina.com 2002年03月25日 我们期待自己成为一个优秀的软件模型设计者,但是,要怎样做,又从哪里开始呢? 将下列原则 ...
- 【杂谈】关于数据和模型,初学者极容易忽视的两个问题!
说起深度学习与CNN,想必大家很熟悉:说起计算机视觉中的目标检测等各个方向,相比大家平时也接触过不少东西了:不过有两个小的方向,虽然相关的论文.项目.甚至研究方法都不多,却是做研究与实际项目落地中非常 ...
- 在深度学习顶会ICLR 2020上,Transformer模型有什么新进展?
一只小狐狸带你解锁炼丹术&NLP秘籍 大数据文摘出品 来源:medium 编译:一一.Andy ICLR是机器学习社群最喜爱的会议平台之一.如今,机器学习领域的会议已成为预印本里论文质量的标志 ...
- 水环境模型与大数据技术融合研究
点击上方蓝字关注我们 水环境模型与大数据技术融合研究 马金锋1, 饶凯锋1, 李若男1,2, 张京1, 郑华1,2 1 中国科学院生态环境研究中心城市与区域生态国家重点实验室,北京 100085 2 ...
- 怎样成为优秀的软件模型设计者
我们期待自己成为一个优秀的软件模型设计者,但是,要怎样做,又从哪里开始呢? 将下列原则应用到你的软件工程中,你会获得立杆见影的成果. 1. 人远比技术重要 你开发软件是为了供别人使用,没有人使用的软件 ...
- 【转】怎样成为优秀的软件模型设计者(文末提供下载)
我们期待自己成为一个优秀的软件模型设计者,但是,要怎样做,又从哪里开始呢? 将下列原则应用到你的软件工程中,你会获得立杆见影的成果. 1. 人远比技术重要 你开发软件是为了供别人使用,没有人使用的软件 ...
- 优秀!腾讯AI Lab开源模型压缩与加速框架PocketFlow!
点击我爱计算机视觉标星,更快获取CVML新技术 PocketFlow,成熟高效的模型压缩与加速框架,经过腾讯内部AI技术商用实践检验,你值得拥有- 以下内容来自腾讯AI实验室(tencent_aila ...
- 详解视频中动作识别模型与代码实践
摘要:本案例将为大家介绍视频动作识别领域的经典模型并进行代码实践. 本文分享自华为云社区<视频动作识别>,作者:HWCloudAI.实验目标 通过本案例的学习: 掌握 C3D 模型训练和模 ...
- 项目:金融行业反欺诈模型
当今以互联网.移动终端等为代表的技术力量正深刻地影响着金融支付市场,信息化.网络化.无线终端等技术的应用,使金融机构特别是银行业的经营发生了天翻地覆的变化,传统的银行柜台和网点业务,正渐渐被电子化交易 ...
最新文章
- 埃森哲、亚马逊和万事达卡抱团推出的区块链项目有何神通?
- CentOS 6 时间,时区,设置修改及时间同步
- Spring Boot与Activiti集成实战
- 数据结构与算法之美-哈希算法
- LeetCode刷题实战(13):Roman to Integer
- php表单 提交数据,PHP表单提交数据
- 别乱用,这样打日志定位 Bug 又快又准!
- 【转】两厢车与三厢车安全性哪个好?
- java实验的总结_Java实验总结——初学(上)
- 研究解决CLOB字段IO问题的方法
- linux中ifi_info的英文全称,【DNS服务器IP地址-域名注册查询-CDN加速技术】
- 软件项目开发与管理(单代号网络图参考例题)
- 一、万用表使用方法图解
- @人生随笔:一年一影帝,百年周星驰
- k8s对外攻击面总结
- oracle 结果集已耗尽_java.sql.SQLException: 结果集已耗尽,解决方法!
- Android Vendor Test Suite (VTS) 的概念、作用及测试方法
- 复制百度文库文字收费内容
- signature=4c7f5ea5ee6ba300a8851e5bd937b405,拦截到崩溃scrollViewContainer 错误
- 我使用pangu模块做了一个文本格式化小工具!