您的位置:首页 > 其它

一个简单的实例来聊聊什么是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. 常见问题

主要是方式 有问题 。我感觉我的理解还不够 。多看看资料再来完善
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  restful