由于有个合作项目,用到了REST,我们这边的服务器是java的,合作方那边主要是PHP环境,为了远程调用的问题,使用了REST作为API的实现方案。现在项目做得差不多了,下面记下自己的一点心得,算是笔记吧。
REST(Representational State Transfer)的说法来自“Architectural Styles and the Design of Network-based Software Architectures”(Roy Fielding,University of California - Irvine,2000),是Fielding大牛的一篇博士论文,从网上搜索下应该可以找到中文版。首先REST根本不是个技术,只是一个架构方式的总称,跟web service也没太大关系,只是凑巧它可以满足最简单的远程信息获取的需要。REST也完全不是新东西,其实早期的HTML静态网页都是REST,只不过随着各种动态脚本语言的使用,互联网的架构也偏离了早期的设定,REST倒是有点拨乱反正的味道。
REST的主要特征包括:
1,所有的东西都是资源,资源用URI表示,每一个会话都是无状态的。
这句话啥意思,记得以前的静态网页不,http://localhost/hello.jsp这实际就是一个资源,这个URI就是他的地址。你肯定说这么简单还用学REST?,对,REST就是这么简单,但是情况再复杂一点,比如要写个购买商品的页面,咱们用JSF或者struts,从后台Session取个客户ID,再从购物车里头把商品列表取出来,我们高兴的写了一个http://localhost/buyProduct.do完成了这个功能,那么这个http://localhost/buyProduct.do的URI就不是REST了,他依赖于运行时环境和Session里的变量,这样的URI不能被重复执行,也就是说直接粘到浏览器运行肯定要报错的。是不是REST也很容易看,这玩意通过URI能访问不,能访问就是REST。
2,公开目录结构式的 URI
看了上面那个例子,那么怎么写这个URI呢,其实REST希望的URI是采用目录结构式的URI,用一种带层次的结构表示对资源的获取,比如我要获取论坛的一个topic,URI的定义就可以表示成http://localhost/discussion/topics/103,在这里topics就是上文我们说到的资源,后面的103是资源的ID。这样的URI简洁美观,搜索引擎友好,可以被浏览器缓存,与会话状态无关,然后你可能要问了,那我以前写的http://localhost/discussion/topics?id=103这样的URI呢?其实这种也可以算REST,URI的表示方式是由开发者决定的,当然http://localhost/discussion/topics?id=103这种写法似乎对搜索引擎不那么友好。
3.用显式的HTTP METHOD表示对资源的操作
以前我们都习惯于用动词来命名操作,比如buyProduct.do,而REST提出了用HTTP的四种方法POST, GET, PUT, DELETE分别表示对资源的CRUD操作,这样URI就成了资源的名词形式,方法成为了对资源的操作类别,比如删除一个帖子需要写成HTTP DELETE http://localhost/discussion/topics/103,更新一个帖子可以写成HTTP UPDATE http://localhost/discussion/topics/103/author/test/content/xxxx...。PUT和DELETE在很多服务器是不被支持的,一般需要用POST和GET来模拟。
REST的返回格式可以是HTTP协议的任何内容,比如HTML,TEXT,大部分人包括我用REST都是为了远程获取服务器资源,所以返回的可以是内容集中的格式,比如XML和JSON。Web Service中的WSDL文件包含了服务的标识符,参数类别,返回值类别,检索和异常处理。这些都是REST不具备的,
分享到:
相关推荐
【REST开发小总结】 REST(Representational State Transfer,表述性状态转移)是一种网络应用程序的设计风格和开发方式,基于HTTP协议,以简洁明了的方式构建松散耦合的系统。REST的核心概念包括资源(Resource)...
### REST实战(REST in Practice)知识点总结 #### 一、REST简介与背景 - **REST (Representational State Transfer)**:一种软件架构风格,用于描述基于网络的应用程序如何工作。REST的核心理念是通过简单的HTTP...
2. 无状态通信:REST要求通信无状态,意味着每次客户端与服务器的交互都包含了必要的信息,服务器无须保存客户端的状态信息。这样不仅简化了服务器的设计,还增强了系统的可伸缩性。虽然无状态通信可能增加数据的...
`kafka-rest-proxy` 是一个重要的工具,它提供了一个RESTful接口来与Apache Kafka集群交互。这个工具使得非Java客户端可以方便地使用HTTP协议来生产和消费Kafka消息,无需直接集成Kafka的Java客户端库。以下是对`...
- **分层系统**: REST 服务可以构建在分层系统之上,这意味着中间层可以处理负载平衡和安全性等问题。 #### 结论 - 通过 Marco Cantù 的著作《REST Servers in Delphi XE Using DataSnap》,我们可以深入了解...
通过对这两个文件的详细研究,可以深入了解WCF REST服务的创建、配置和测试过程,以及如何与之交互。 总结,WCF REST服务测试涉及到WCF服务的REST化设计、HTTP协议的理解以及客户端如何与服务进行有效通信。通过...
总结来说,Activiti REST服务是Activiti引擎与外部系统交互的重要桥梁,它使得流程管理更加灵活和便捷。开发者应当熟悉这些接口,以便在实际工作中高效地利用Activiti实现业务流程自动化。通过深入学习和实践,我们...
**Python库 django-rest-framework-social-oauth2-1.0.1** `django-rest-framework-social-oauth2` 是一个基于 Django Rest Framework 的社交认证扩展库,主要用于实现 OAuth2 身份验证流程。这个库使得 Django ...
总结起来,"Rest 开发小案例"是一个学习RESTful服务开发的好起点,它涵盖了使用Jersey框架创建REST服务的基础知识。通过此案例,开发者可以快速了解REST设计原则,掌握如何在Java环境中构建RESTful API,以及如何与...
总结来说,"geoserver-rest-python-1.1"是一个用于Python环境下的Geoserver REST API客户端,它提供了一种高效、易用的方式来管理Geoserver实例,优化后的1.1版本增强了其稳定性和功能,为地理信息系统开发提供了...
总结来说,KEPWARE IoT Gateway 的 REST Server 提供了一种简单而灵活的方式,使开发者和系统管理员能够利用 RESTful API 与 KEPWARE 进行数据交互。通过配置网络设置、选择数据源、设置安全选项,以及使用 curl ...
总结,ArcGIS Server REST API是GIS开发的核心工具之一,理解并熟练运用它,能够极大地提升地理信息系统的开发能力和应用范围。通过深入学习和实践,开发者可以构建出高效、智能的GIS应用,满足各种业务需求。
总结起来,本例子通过Spring框架展示了如何开发一个简单的REST服务。从创建REST控制器、定义资源模型,到使用HTTP方法和JSON响应,以及如何测试和保护这些服务,这些都是开发REST API的基础步骤。理解并掌握这些概念...
总结,使用Servlet实现REST框架涉及对HTTP方法的理解、URL映射、路径参数、内容协商以及业务逻辑的处理。这种实现方式简单直观,适合小型项目。然而,对于大型复杂的应用,更推荐使用Spring Boot或Vert.x等成熟的...
REST (Representational State Transfer) 是一种设计网络应用程序的架构风格,其核心原则之一是无状态性。在REST架构中,客户端和服务端之间的交互基于HTTP协议,通过发送HTTP请求并接收HTTP响应来完成。 #### 三、...
总结,Google Simple REST Client是一款强大的REST API测试工具,它的易用性和灵活性使得开发者能够高效地测试和调试REST服务。通过阅读提供的使用文档,可以更深入地了解其各种功能,并充分利用它来提升开发效率。
"微服务架构SOA分为2种 SOAP即Webservice和REST"这部分内容可能会讨论微服务架构如何采用SOA思想,并对比SOAP Web服务和REST服务在微服务场景下的适用性。微服务架构主张将单个大型应用拆分为多个小型、独立的服务,...
总结来说,WCF REST通过`UriTemplate`、`UriTemplateTable`和`WebHttpDispatchOperationSelector`实现了RESTful服务的路由和调度,使得服务能够优雅地处理各种HTTP请求。了解并熟练掌握这些概念对于构建高效、可扩展...
总结来说,"activiti-rest.zip" 提供了 Activiti 工作流引擎的 REST 接口实现,这对于希望以非侵入式方式集成 Activiti 到 Web 应用或微服务架构中的开发者来说是非常有价值的。通过理解和熟练使用这个 API,你可以...