RESTful APIs

1 介绍

说RESTful之前,先说说其它的问题。

1.1 网站定位?

CS软件,我们称之为软件,不涉及到RPC时,对数据和业务都是用面向对象的方式处理,那么网站算不算软件?

1.2 面向对象?

Java语言本身是面向对象的,经过Hibernate、Mybatis等ORM框架,数据操作也是面向对象的,还有什么没有被OO?

不觉得http://ip:host/deleteUserByCidAndName?cid=xx&name=yy 这样的路径奇怪?

1.3 Webserice?

核心:WDSL、UDDI、SOAP,数据格式为XML,经由HTTP再封装一次,调用方法风格为RPC格式。有什么问题?

Webservice太重量级,而且RPC请求方式如getUserByIdAndName,是平行格式,即各个请求之间是没有逻辑上的关系的,请求不友好,不易控制……

1.4 HTTP 的形式

我为什么不用更轻量的HTTP的服务APIs,如(快递)

    URL url = new URL("http://www.xxx.cn/rest/?"
                    + "&order=" + expressDetail.getEno() ;
            //连接
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setAllowUserInteraction(false);
            con.setRequestMethod("GET");
            con.setRequestProperty("Charset", "UTF-8");
            InputStream urlStream = url.openStream();

使用以上几行代码,即可完成一次请求交互,我为什么还要使用沉重的传统的WebService?

1.5 继续优化

既然使用HTTP方式的WebService,为什么不让它有一种更好的风格?

2 概念

2.1 REST

Representational State Transfer, 表述性状态传递,直白的翻译我是没理解,就像HTTP翻译成超文本传输协议,一样容易误解(传输协议不应该是传输层?英文思维学编程的优势,参见印度)。

另外REST是推荐的APIs风格,不是标准。符合REST风格的,称为RESTful。

2.2 特点

这是一种
{
轻量级
面向对象
易于控制(权限)
符合HTTP协议
Webservice升级版
}
的风格。

2.3 三个重点

路径 URI
方法 method
内容格式 type

2.4 四个阶段

源自三个重点:

分别为:

1. 摆脱POX(Plain Old XML),我的理解是传统的WSDL\SOAP的webservice

2. 如何定义资源

3. 如何使用HTTP的方法

4. 如何控制超媒体(img\video等)

3 如何RESTful

3.1 路径

面向对象是一种以人的视角看待世界的方式,所谓人的视角我认为就是分类、分层,如xx是yy的(继承)。而REST就是将网站看做是有层次的资源,达到面向对象的目的,如 http://host:port/projects/14/comments

3.2 方法

八种方法(虽然GET、POST被使用的更多),包含了网站开发需要的 增删改查、上传操作。

3.3 内容格式

Json

Xml

Image

……

3.4 最终样式

http://host:port/projects/14/comments GET
http://host:port/projects/14/comments/1  DELETE
http://host:port/projects/14/comments POST

即comment 是 project 的;删除id为14的project下ID为1的评论……

3.5 其它建议

better URI

4 SpringMVC

4.1 主要注解

@RequestMapping
@PathVariable
@ResponseBody
@RequestParam
@MatrixVariable(3.2)

4.2 路径

主要靠@RequestMapping解决,通过/区分资源的层次。

4.3 方法

主要靠@RequestMapping下的Method注解,其支持:

4.4 格式

@RequestMapping下,consumes为处理的格式限制,produces为返回的数据格式:

或者

5 项目使用

网站前端使用较多,尤其是需要为IOS等其他设备提供服务时。

网站管理端因为后台管理端很少开发公共API,用的也比较少,但是可以用REST优化一下路径,让API(Web Service)风格更好,方便开发和测试理解,也容易进行权限控制,如:

http://ip:host/project/index.htm

http://ip:host/project/update.htm

http://ip:host/project/add.htm

http://ip:host/project/delete.htm

6 其它

其它需要考虑的内容:

API版本

服务器对方法的支持

Spring HATEOAS

SOA

ESB

时间: 2024-12-29 09:17:36

RESTful APIs的相关文章

用Flask 搭建RESTful APIs 服务器端

此文摘录自: http://www.cnblogs.com/vovlie/p/4178077.html 最近这些年,REST已经成为web services和APIs的标准架构,很多APP的架构基本上是使用RESTful的形式了. 本文将会使用python的Flask框架轻松实现一个RESTful的服务. REST的六个特性: Client-Server:服务器端与客户端分离. Stateless(无状态):每次客户端请求必需包含完整的信息,换句话说,每一次请求都是独立的. Cacheable(

HTTP based RESTful APIs - asp.net web api

1.HTTP http://www.w3.org/Protocols/rfc2616/rfc2616.html 2.REST是什么http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm http://www.ibm.com/developerworks/library/ws-restful/index.html http://en.wikipedia.org/wiki/REST Web service APIs that adhere

Xitrum学习笔记04 - RESTful APIs

RESTful API: 符合RESTful架构的API称为RESTful API,不同的前端设备与后端进行通信的一种统一机制 什么是RESTful架构: (1)每一个URI代表一种资源: (2)客户端和服务器之间,传递这种资源的某种表现层: (3)客户端通过HTTP动词(GET用来获取资源,POST用来新建.更新资源,PUT用来更新资源,DELETE用来删除资源),对服务器端资源进行操作,实现"表现层状态转化". REST -- REpresentational State Tran

AngularJS ——ngResource、RESTful APIs 使用

这篇文章里,用以下两个情景用例来解释: 保存/持久化 新的数据对象 更新存在的数据对象 代码片段包含了AngularJs代码和Spring MVC代码,以能够让你简单快速的上手. 想要$resource 服务工作,需要添加一段实际代码: 应用angular-resource.js文件,你可以使用Google Hosted Libraries来实现. <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular-r

Yii2框架RESTful API教程(二) - 格式化响应,授权认证和速率限制

之前写过一篇Yii2框架RESTful API教程(一) - 快速入门,今天接着来探究一下Yii2 RESTful的格式化响应,授权认证和速率限制三个部分 一.目录结构 先列出需要改动的文件.目录如下: web ├─ common │ └─ models │ └ User.php └─ frontend ├─ config │ └ main.php └─ controllers └ BookController.php 二.格式化响应 Yii2 RESTful支持JSON和XML格式,如果想指定

3.Spring Boot中使用Swagger2构建强大的RESTful API文档

原文:http://www.jianshu.com/p/8033ef83a8ed 由于Spring Boot能够快速开发.便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API.而我们构建RESTful API的目的通常都是由于多终端的原因,这些终端会共用很多底层业务逻辑,因此我们会抽象出这样一层来同时服务于多个移动端或者Web前端. 这样一来,我们的RESTful API就有可能要面对多个开发人员或多个开发团队:IOS开发.Android开发或是Web开发

黄聪:AngularJS中的$resource使用与Restful资源交互(转)

原文:http://blog.csdn.net/he90227/article/details/50525836 1.AngularJS中的 $resource 这个服务可以创建一个资源对象,我们可以用它非常方便地同支持RESTful的服务端数据源进行交互,当同支持RESTful的数据模型一起工作时,它就派上用场了.      REST是Representational State Transfer(表征状态转移)的缩写,是服务器用来智能化地提供数据服务的一种方式 1)我们首先需要引入ng-Re

webservice restful rpc

webservice: 上世纪90年代流行的分布式技术,如DCOM,CORBA,RMI,范式是RPC,但各系统数据类型不一致,实现/调用机制不同,各系统间互通不可能.XML的出现,让数据类型一致了,SOAP的出现,让各系统可以相互调用了.Simple Object Access Protocol的原意是XML-RPC,但人们很快就发现方法调用太狭隘,而消息传递更加通用.WSDL即支持rpc/encoded也支持document/literal,但前者已成为历史遗留.webservices是soa

Spring Boot中使用Swagger2生成RESTful API文档(转)

效果如下图所示: 添加Swagger2依赖 在pom.xml中加入Swagger2的依赖 <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <versi