一个简单的实例来聊聊什么是Restful接口

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. 常见问题

主要是方式 有问题 。我感觉我的理解还不够 。多看看资料再来完善

  • 4
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值