一个简单的实例来聊聊什么是Restful接口
2018-03-15 15:22
288 查看
Restful接口的简介
通过学习本文档后能够掌握到的知识点1.Restful的基本概念
2.Restful原则条件
3.Restful分层系统
子曰:“学而不思则罔,思而不学则殆。”
1. 使用Restful的原因
2018元月第一份工作:要求给一个系统写上一个Restful接口。(给一个外部系统提供访问当前系统的方法)一开始的决定是WEBSEVICE接口但是基于目前更加流行RESTFUL接口。RESTFUL接口更加合适目前的前后端分离的开发,更加简单。好吧!其实我也不知道。哈哈2. Restful的·基本概念
学习任何新知识首先得明白其基本概念,比如:什么是Restful。
Restful是REST(英文:Representational State Transfer,简称REST)描述了一个架构样式的网络系统,比如 web 应用程序。它首次出现在 2000 年 Roy Fielding 的博士论文中,他是 HTTP 规范的主要编写者之一。在目前主流的三种Web服务交互方案中,REST相比于SOAP(Simple Object Access protocol,简单对象访问协议)以及XML-RPC更加简单明了,无论是对URL的处理还是对Payload的编码,REST都倾向于用更加简单轻量的方法设计和实现。值得注意的是REST并没有一个明确的标准,而更像是一种设计的风格 —–划重点,一种设计风格。这是一种风格。并不是定死得规则
2.1原则条件
REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在请求之间的任何时间点重启,客户端不会得到通知。此外,无状态请求可以由任何可用服务器回答,这十分适合云计算之类的环境。客户端可以缓存数据以改进性能。
在服务器端,应用程序状态和功能可以分为各种资源。资源是一个有趣的概念实体,它向客户端公开。资源的例子有:应用程序对象、数据库记录、算法等等。每个资源都使用 URI (Universal Resource Identifier) 得到一个唯一的地址。所有资源都共享统一的接口,以便在客户端和服务器之间传输状态。使用的是标准的 HTTP 方法,比如 GET、PUT、POST 和 DELETE。Hypermedia 是应用程序状态的引擎,资源表示通过超链接互联。
2.2分层系统
另一个重要的 REST 原则是分层系统,这表示组件无法了解它与之交互的中间层以外的组件。通过将系统知识限制在单个层,可以限制整个系统的复杂性,促进了底层的独立性。当 REST 架构的约束条件作为一个整体应用时,将生成一个可以扩展到大量客户端的应用程序。它还降低了客户端和服务器之间的交互延迟。统一界面简化了整个系统架构,改进了子系统之间交互的可见性。REST 简化了客户端和服务器的实现。
3. 一个简单的DEMO
@Path("这里写访问路径") //代表组件 。具体作用我不太清楚可以百度一波 @Component //标识必须要JSON格式的请求类型 。就是POSTMAN需要带一个MEDIA-TYPES. //APPLICATION -JSON @Produces(MediaType.APPLICATION_JSON) public class FrozeUserRestService { @Autowired IChangCilentStatusService changCilentStatusService; WsResponseBuilder builder = new WsResponseBuilder(); /** * @author Wei Li * @version 2018/1/26 * @param request * @return message(成功,或者失败 (失败提示详细信息) * 解题思路: * 1.将sysId进行校验,成功继续下一步,失败返回message“操作失败(该系统无权访问)” * 2.通过ucnId来查询用户信息。用户信息存在继续,用户不存在。返回message“操作失败(不存在该用户)” * 3.冻结操作。直接提供两个参数Y(冻结)/N(解冻)无需在意当前状态。成功返回message */ @Path("/frozeUser") //此注解标识 获取方式为POST @POST @Produces(MediaType.APPLICATION_JSON) public Response frozeUser(@Context HttpServletRequest request){ //获取参数 String sysId=request.getParameter("sysId"); String ucnId=request.getParameter("ucnId"); String isFroze=request.getParameter("isFroze"); //返回值创建 BasicResponse response = new BasicResponse(); // 1.将sysId进行校验,成功继续下一步,失败返回message“操作失败(该系统无权访问)” //checkId应该从一张枚举表,或者键值对中获取 。用循环来从中判断。此时为测试。 String checkId="123456"; //判断校验码是否存在 if(!StringUtils.isEmpty(sysId)){ if(sysId.equals(checkId)){ //校验正确进行对用户状态的操作 response=changCilentStatusService.frozen(ucnId,isFroze); }else{ response.setStatus(BusinessException.SYSID_NUMBER_ERROR.getCode()); response.setMessage(BusinessException.SYSID_NUMBER_ERROR.getValue()); } }else{ //如果校验码不存在执行以下操作 response.setStatus(BusinessException.SYSID_NUMBER_EMPTY.getCode()); response.setMessage(BusinessException.SYSID_NUMBER_EMPTY.getValue()); } //将返回值变成JASO格式 //成功这个状态码只能出现一个 // response.setStatus(Response.Status.OK.getStatusCode()); //失败,没找到 //response.setMessage(sysId+ucnId+isFroze); builder.addEntity(response); return builder.build(); } }
4. 常见问题
主要是方式 有问题 。我感觉我的理解还不够 。多看看资料再来完善相关文章推荐
- 用了N年的接口,你知道接口是什么吗?——一个简单实例说明接口的伟大意义
- 一个简单的fastJson实例
- 一个简单的Servlet注册实例
- 一个简单的struts 2实例讲解
- 一个简单json数据提交实例
- 一个关于多线程的简单实例(抄书)
- 一个简单的jQuery插件开发实例
- 简单说明什么是递归,什么情况下会使用递归,并写一个简单的递归程序。
- 一个简单的AJAX实例
- Hibernate 学习笔记-1-1(一个简单的Hibernate实例)
- php+jquery+ajax+json的一个最简单实例
- 问一个简单问题[STAThread]是什么意思
- JavaScript,自己动手做了一个简单的鼠标拖动的实例
- 一个简单的ajax实例
- 一个简单的递归实例
- JNI的一个简单实例
- 简单的存储过程实例2--对比三个表中的数据,将三个表中金额挑选一个最优值
- 一个简单的Draw2d动画实例
- 实例学习SSIS(一)--制作一个简单的ETL包
- 一个简单又不简单的问题——什么是富有实践经验的技术人员