REST(表述性状态转移)是最近几年讨论的最为热烈的话题之一,其起源于Roy.T.Fielding博士的论文《软件架构风格和基于网路的软件架构设计》。Roy博士在他的论文里从架构风格角度阐述了网络应用程序中最佳架构风格REST。
首先,REST是一个架构风格而不是一个架构,所谓架构风格就是凌驾于架构之上的一组约束。
其次,REST对立面是RPC,而不是webservices或者SOAP,最近一些年关于REST和RPC的争论一直不断
再次,一般的互联网服务调用存在两种User Agent,一种是普通浏览器,另一种是Client程序,REST主要针对是第二者,系统集成时候各个系统之间的服务调用
REST强调的是尽可能多的用HTTP协议本身的语义来传达信息,这样能减少服务双方关于语义共识的需要
在我看来,REST是标准的互联网技术,在企业内网应用价值大打折扣,因为在互联网中,随时有新的服务供应商产生,你永远也不知道将来可能要调用谁的服务,也永远不知道将来谁会把服务改掉,所以使用传统RPC服务使用者和服务供应者之间的沟通的协调难度非常大。而在企业内网虽然系统也很庞大,但是再庞大的系统也被认为是封闭的,可估算的,你很容易地知道要调用哪些服务。
MartinFowler在最近的一篇文章(http://martinfowler.com/articles/richardsonMaturityModel.html)里描述了逐步实现REST的四个级别:
0级:传统的RPC,基于SOAP的WS,调用的服务名,参数放在HTTP协议的body里面,同时必须以POST方式提交,问题在于你必须清楚的知道所有服务,子服务,及其参数的信息,并且需要知道各种服务的不同点。
1级:利用resource概念,把所有服务都抽取成resource概念,从body中提取到header里,这样做的好处就是如果你知道一个服务地址,你可能无需知道具体服务是什么,依照资源的惯例就访问到服务,比如/books/1。
2级:利用HTTP动词,HTTP定义了4种动词,GET获取服务器资源,POST在服务器上创建新资源,PUT更改服务器上资源,DELETE删除服务器上资源,任何操作都可以看成增删改查,所以利用标准的http verb加上resource(/book/1)就能准确地操作资源,当你不知道服务具体是什么的时候也可以轻易按照惯例访问到服务,然而服务供应商更改服务也需要遵循惯例,不会像RPC那样轻易更改服务接口。
3级:最高级别,超媒体既应用状态引擎。这个意思是说,对于任何服务都存在很多子服务,你只需要知道第一个服务的入口,便可以依据服务返回结构的自描述性得到下一个服务的入口,这样在服务供应商修改服务的时候,不会影响到客户端的调用。
分享到:
相关推荐
4. **统一接口**:主要通过四个HTTP动词来操作资源:GET(获取资源)、POST(新建资源)、PUT(更新资源)、DELETE(删除资源)。 5. **分层系统**:REST允许使用中间层,如代理服务器,增加系统的可扩展性。 6. **...
Elastic拥有一个完善的产品生态系统,其中最著名的包括Elasticsearch、Kibana和Logstash,这三者共同构成了著名的ELK技术栈。 - **Elasticsearch**:分布式搜索和分析引擎。 - **Kibana**:用于可视化和管理Elastic...
Presto是一款开源的大规模数据分析引擎,它支持SQL查询,能够跨多个数据源处理PB级别的数据。本文将基于提供的Presto资源管理REST API文档来详细介绍其核心功能与操作方法。 #### 一、/v1/cluster **功能说明:** ...
Richardson 成熟度模型定义了 REST 服务的四个级别,帮助评估 REST 服务的成熟度: 1. **0级**:仅提供 URL 访问资源。 2. **1级**:引入 HTTP 方法(GET、POST 等)来区分操作。 3. **2级**:使用 HTTP 状态码来...
这个过程通常包括四个步骤:授权、授权确认、交换代码和获取令牌。 最后,用户使用获取到的访问令牌在后续请求中附带,以便服务器验证并允许访问API资源。 总的来说,Django REST框架与OAuth的结合,为API的安全性...
WCF REST 服务的配置涉及多个方面,包括服务行为、绑定和安全性。上述配置示例展示了如何设置一个支持 RESTful 操作的服务,同时包含了基本的安全措施。此外,还通过自定义 `ServiceAuthorizationManager` 实现了...
因此,对API要划分出一定的权限级别,然后做一个用户的鉴权,依据鉴权结果给予用户开放对应的API。 目前,比较主流的方案有几种:用户名和密码鉴权、使用OAuth进行鉴权、自行采用Token进行鉴权。我们主要介绍第三种...
REST(Representational State Transfer)是一种软件架构风格,用于构建互联网级别的分布式系统。RESTful API的设计主要包括以下原则: 1. 资源导向:每个URI代表一个资源。 2. HTTP方法:使用GET、POST、PUT、...
建议先完成前几个章节的基础设置和模型创建部分,然后再进入API的构建过程。 #### 二、环境搭建、模型和管理界面 本章将指导您完成项目的创建以及数据库的配置。 ##### 2.1 创建项目 - 使用`django-admin ...
3. **启动服务器**:配置服务器参数,如监听端口、日志级别等,然后启动 REST API Server。 4. **测试与调试**:使用 REST 客户端工具(如 Postman)发送请求,验证 API 功能是否正常。同时,通过日志监控服务器...
REST的核心理念是资源导向,通过HTTP协议来操作资源,它定义了四个基本操作:GET(获取资源)、POST(创建资源)、PUT(更新资源)和DELETE(删除资源)。在这个待办事项应用中,我们可能会有如GET /todos(获取所有...
这个模型描述了四个级别,从0级开始。马丁·福勒对此成熟度模型有很好的阐述: 1. 0级:POX沼泽 - 在这一级别,我们只是将HTTP用作传输层。SOAP可以被视为0级技术,它使用HTTP作为传输,但仅限于此。值得一提的是,...
**正文** Shlink是一款强大的、...总之,Shlink作为一个功能丰富的URL缩短工具,不仅适合个人和小型团队使用,也能够满足大型企业的需求。其易于部署、高度可配置和强大的API支持,使其成为PHP开发中的一个实用选择。
通过自动配置和起步依赖,Spring Boot允许开发者快速创建独立的、生产级别的基于Spring的应用程序。 **二、MyBatis-Plus** MyBatis-Plus是MyBatis的增强工具,它在MyBatis的基础上做了很多简化,包括提供 CRUD 操作...
6. HTTP方法:`GET`、`POST`、`PUT`、`DELETE`是HTTP协议中的四种主要请求方法,分别对应获取资源、提交数据、更新资源和删除资源的操作。在开发REST API时,这些方法常被用来处理客户端的请求。 在名为...
- **作为JAX-RS规范的一部分**,Jersey客户端API经过严格的内部测试,确保了其生产级别的稳定性和可靠性。 - **广泛的用户基础**:拥有庞大的用户群体,意味着更丰富的社区资源和支持。 - **内置对XML和JSON的支持**...