标签:规则 网站 oat 参数 web服务 另一个 int 视图 turn
REST(Representational State Transfer):表述性状态转移,是基于HTTP、URI、MIME(HTML、JSON等)协议的Web软件架构。它不同于SOAP Web服务(RPC)关注处理,面向行为,其更关注要处理的数据,面向资源。
1.1 《Spring实战》中是这样描述REST的:
为了理解REST是什么,我们将它的首字母缩写才拆分为不同的构成部分:
在REST中,资源通过URL进行识别和定位。REST中会有行为,它们是通过HTTP方法来进行定义的。这些HTTP方法通常匹配如下CURD动作:
我是萌萌的分割线
1.2 wiki是这样描述REST的:
RESTful API:符合REST设计风格的Web API,它从以下三个方面资源进行定义的:
http://example.com/resources/
HTTP请求方法在RESTful API中的典型应用:
资源 | GET | PUT | POST | DELETE |
---|---|---|---|---|
一组资源的URI,比如http://example.com/resources/ | 列出URI,以及该资源组中每个资源的详细信息(后者可选)。 | 使用给定的一组资源替换当前整组资源。 | 在本组资源中创建/追加一个新的资源。该操作往往返回新资源的URL。 | 删除整组资源。 |
单个资源的URI,比如http://example.com/resources/142 | 获取指定的资源的详细信息,格式可以自选一个合适的网络媒体类型(比如:XML、JSON等) | 替换/创建指定的资源。并将其追加到相应的资源组中。 | 把指定的资源当做一个资源组,并在其下创建/追加一个新的元素,使其隶属于当前资源。 | 删除指定的元素。 |
实现举例:
列出所有物品:GET http://www.store.com/products
呈现某一件商品: GET http://www.store.com/product/12345
呈现一些商品(过滤规则):GET http://www.store.com/product/1022?limit=10(id为1022后的10件商品)
下单购买:
POST http://www.store.com/order <purchase-order> <item> ... </item> </purchase-order>
1.3 实现网站(自己找了几个网站看了看,有几个网站个人觉得API挺符合RESTful API):
小米官网:看了几家购物网站,就觉得小米官网除了登录(估计安全原因),其它的设计挺符合RESTful API
落网:一家音乐网站,其推荐的小众音乐挺不错的。因为其功能较为简单,所以其API看起来挺简洁的,一眼看上去就符合RESTful API
我是萌萌的分割线
1.4 私以为:
其实自己看了后,感觉不是太懂,模模糊糊的。下面简单说点自己的理解吧:
1.5 设计好的RESTful API接口
RESTful API的设计原则
2.1 大体结构
在一般的SpringMVC框架中处理流程如下:
当HTTP请求到达DispatcherServlet时,DispatcherServlet通过handlerMapping找到该URL对于的Controller后,DispatcherServlet会把HttpServletRequest转发给Controller处理(SpringMVC在这里做了许多的改进)。Controller处理完后会把Model and View传给DispatcherServlet,其会通过ViewResolver找到物理视图,然后把Model发给该视图中进行渲染,最后视图会响应HTTP请求,发送响应的数据。
REST在SpringMVC框架中处理流程如下:
当HTTP请求到达DispatcherServlet时,DispatcherServlet通过handlerMapping找到该URL对于的Controller后,DispatcherServlet会把HttpServletRequest转发给Controller处理(SpringMVC在这里做了许多的改进)在这里时,SpringMVC会通过消息转化器(Message Conversion)@RequestBody、@RequestMapping、@PathVariable接受响应的资源,GET、POST等方法标注行为。然后Controller调用service处理相关资源行为,最后在通过Message Conversion(@ResponseBody)返回数据。
2.2 支持的构件
SpringMVC在Controller中有许多的构件支持REST:
2.3 Spring使用
导入Jackson
1 <dependency> 2 <groupId>com.fasterxml.jackson.core</groupId> 3 <artifactId>jackson-databind</artifactId> 4 <version>2.4.3</version> 5 </dependency>
JS
1 function login(){ 2 var username = $(‘#username‘).val(); 3 var password = $(‘#password‘).val(); 4 var message = $(‘#message‘); 5 if(username.length<6 || password.length <6){ 6 message.hide().html(‘用户或密码位数小于6位‘).show(); 7 }else{ 8 $.ajax({ 9 url : "/springMVC/hello", 10 type : "POST", 11 dataType : "text", 12 timeout : 10000, 13 data : {"username":username,"password":password}, 14 success : function(result){ 15 console.log(result); 16 } 17 }); 18 } 19 }
Controller
1 @Controller 2 @RequestMapping(value="/springMVC") 3 public class UserController { 4 @RequestMapping(value="/login", method=RequestMethod.GET) 5 public String login() { 6 return "login"; 7 } 8 9 @RequestMapping(value="/hello") 10 @ResponseBody 11 public User hello(@RequestParam(value="username") String username, 12 @RequestParam(value="username")String password) { 13 System.out.println(username + "\t" + password); 14 User user = new User(5,username); 15 return user; 16 } 17 }
HTTP Request
1 POST /springMVC/hello HTTP/1.1 2 Accept:text/plain, */*; q=0.01 3 Accept-Encoding:gzip, deflate, br 4 Accept-Language:zh-CN,zh;q=0.8 5 Connection:keep-alive 6 Content-Length:31 7 Content-Type:application/x-www-form-urlencoded; charset=UTF-8 8 Cookie:JSESSIONID=1mnbs1bxxlxvblq759pgltl8q 9 Host:localhost:8080 10 Origin:http://localhost:8080 11 Referer:http://localhost:8080/springMVC/login 12 User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36 13 X-Requested-With:XMLHttpRequest 14 Form Data 15 view parsed 16 17 username=132456&password=123456
HTTP Response
1 HTTP/1.1 200 OK 2 Content-Type:application/json;charset=UTF-8 3 Date:Wed, 12 Apr 2017 15:27:27 GMT 4 Server:Jetty(8.1.14.v20131031) 5 Transfer-Encoding:chunked 6 7 {"id":5,"name":"132456"}
《Spring实战》读书笔记--使用SpringMVC构建REST API
标签:规则 网站 oat 参数 web服务 另一个 int 视图 turn
原文地址:http://www.cnblogs.com/maying3010/p/6701994.html