`
herman_liu76
  • 浏览: 100035 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

我所理解的restful风格

 
阅读更多
   第一次看到时,看几个例子,心想这个风格很好理解,貌似是蛮简单的规范嘛。最近又看到几篇文件,对restful有了更深的理解。感觉网上很多帖子都是比较雷同的,只能知其然,而不知其所以然,更不知道来龙去脉,所以不能很好的应用或者弃用、甚至发展一个技术。

   没有时间找全各种资料来总结,目前只能凭一些资源中的线索,大概猜测一下这些问题,给自己一个回答。

   当我们做一件事情时,最主要提是动词+名词。比如获取一本书,买一件衣服,查看一批鞋子...扔掉购物袋。所以我们一系列的工作就是一系列的动词+名词。

1.为什么会设计出http这样的协议
   当出现互联网时,最主要的是面对各种各样的足够细小的名词,比如文本、图片、声音、视频,把一切这样细小而明确的东西组合在一起。相对来说,名词的个数是非常多的,而相对动词却比较少。

   而且显而易见的是,对这些工作分类时,首先是按物品分类,不会按动作分类。我们的世界是按资源组织起来的,因为图片会归一个机构管理,而没有机构管理获取这个动作。

   所以http协议面对的是细节的资源,必须以名词为主。因为资源划分的足够细小,所以动词就相对就非常的少了。

2.http是一个应用协议,而非传输协议
   传输协议只是传递消息,信息。而应用协议就实际具体的操作应用了,所以http会设计用url显示资源,用method指明操作,所以足够用这样的协议来实现应用了。
   而在当前实践中,由于浏览器的方便而引爆了web应用,所以把http当成一个传输参数的工具了,我们并不按照原来的http设计思路,而只是把参数传过来,至于做什么事情,由参数来决定。比如可以用get传的参数做任务你相做的操作,可是更改数据,可以删除数据,可以更新数据。有时只是考虑安全或者参数的大小。
   由于开发者对http的设计意图有误解,导致了将http这个应用层协议当成传输协议这样低效率的误用。

3.为什么传统的应用并没有引爆restful风格
    http应用协议就是从广阔的互联网来考虑的,而实际的应用却只是从monolithic这样的单体应用开始的,也许开始都是一台机器上,也许后面只是数据库拆分出去了。
   
    由于这些应用的复杂度与拆分的广阔度都没达到一定的程度,所以没有到达按最小的资源设计应用的时刻,直到现在SOA,微服务拆分到一定的细颗粒度,都有可能考虑到与http的初衷结合在一起了。

    在传统应用中,也会有一个名词,而通常这个名词只是大的模块划分,并没有细化的一个资源。比如url中出现order,这个并不是一个基础的订单对象,而是一个大的订单模块,所以对模块的工作,就有了createOrder这样的动词操作。这个动词有时不是只产生一个订单中的一个数据这么简单,可能代表着生成订单及子订单,甚至尝试去扣费,记录消费。是一个不折不扣的组合出来的大动作。这么想来,这样的设计也是名词+动词的设计,只不是是大颗粒度的模块名称与一系列繁多的操作的关系。
    由于这样的情况下的应用,以模块划分的名词并不是很多,而丰富的是动词。毕竟模块远小于模块内的各种操作。http恰好是多名称与少操作的组合,所以难以以http那样细颗粒度的应用协议相互匹配。自然把http当成传输协议来使用。

4.微服务的到来与restful的兴起
    随着软件系统的越来越复杂,应用不断的拆分,以及在互联网环境中的分布式应用的兴起,软件的设计与http协议风格可以有统一的基础了。
    如果你的应用中的名词拆到可以只用http提供的几个动作就可以使用了,那基本上拆到位了,可以用restful风格了。否则也只是学学样子而已吧。

5.不得不说的返回值设计
   http作为应用层协议,既然已经用了restful风格了,那么返回值也应该遵守这样的风格,有比如:status 200(成功)、500(内部服务器错误)这样的设计。
   另提到一点,这个返回码的设计对普通的返回码设计非常有学习价值。首先是分类,100、200...500这样的大分类,另外是404这样的细分类设计。
   比如我看到有的系统设计返回码,参数检测多一项不合格,就设计一个全新的返回码,没有归类,这样调用方会非常不方便,有时候调用方只想对所有的参数检测不通过情况,显示一个通用的通知,没有规律就要要每次有新情况而改代码,加上一种if判断。而有了归类的话,即使有新的,调用方通常也可以不改变代码。

分享到:
评论

相关推荐

    自己对RESTful风格的理解

    在这个例子中,可以通过定义一个控制器方法,使用@RequestMapping注解来映射一个符合RESTful风格的URL路径。在URL中,可以通过使用{username}和{password}这样的路径变量来传递参数。在控制器方法中,可以使用@...

    SpringMVC RESTFUL风格

    3. **简洁性**:相较于传统的非RESTFUL风格URL,RESTFUL风格的URL更简洁、易于理解和维护。 4. **一致性**:不同的资源可以使用相同的URL模式,这有助于提高系统的可预见性和一致性。 #### 三、RESTFUL风格与非...

    vue 调用 RESTful风格接口操作

    本篇文章将详细介绍如何在Vue项目中调用RESTful风格的接口。 REST(Representational State Transfer)是一种软件架构风格,用于设计网络应用程序。它强调通过HTTP方法(GET、POST、PUT、DELETE)来对应不同的操作...

    httpclient和RestfuL风格上传下载文件

    综上所述,HTTPClient和RESTful风格的文件上传下载在Java分布式系统中具有广泛应用。通过HTTPClient实现HTTP请求,利用RESTful接口定义清晰的操作方式,可以构建高效、灵活的文件传输方案。同时,理解并遵循良好的...

    SpringMVC的Restful风格Demo

    综上所述,SpringMVC结合RESTful风格可以构建出高效、可扩展的Web服务。开发者应熟练掌握这些知识点,以适应现代互联网应用的开发需求。在具体项目实践中,根据需求选择合适的设计模式和最佳实践,可以大大提高开发...

    restful风格webservice代码

    RESTful风格的Web服务是一种基于HTTP协议的轻量级接口设计模式,广泛应用于现代Web应用程序中,以提供灵活、高效且易于理解的数据交互方式。在本项目中,"restful风格webservice代码"是一个商业项目测试用的源代码...

    springmvc之restful风格CRUD

    本文将深入探讨如何在Spring MVC中实现RESTful风格的CRUD操作,这对初学者尤其有价值。 首先,了解REST(Representational State Transfer,表述性状态转移)是一种网络应用程序的设计风格和开发方式,基于HTTP协议...

    restful风格请求,token鉴权实例

    通过阅读和理解这些代码,你将能深入理解如何在Spring Boot应用中实现RESTful风格的接口并结合JWT进行安全控制。 总结来说,本实例旨在教授如何在Spring Boot环境下,使用RESTful API设计原则和JWT技术,实现高效且...

    一个Delphi实现的HttpServer,支持RESTful风格路由

    RESTful风格的HTTP服务器可以处理各种HTTP请求,并返回适当的响应,使得API设计简洁、清晰且易于理解和使用。 TinyHttpd.pas文件是这个Delphi HTTP服务器的源代码文件,我们可以从中学习到以下关键知识点: 1. **...

    Restful 接口风格设计 原版

    Restful接口风格设计是现代Web服务...综上所述,"Restful接口风格设计"是一种高效、清晰的Web API设计方法,Python Web开发中通过框架的支持可以轻松实现。掌握这一设计原则对于构建可扩展、易维护的Web服务至关重要。

    RestFul(一)WebService之CXF的RestFul风格开发

    这将帮助你深入理解RESTful服务的实现机制。 **6. 工具支持** CXF提供了CXF-DOSGi和CXF-Tools等工具,方便开发者进行服务的生成、测试和调试。例如,CXF-Tools可以将Java接口自动生成对应的RESTful服务代码。 **7....

    restful风格java版本

    RESTful风格的Java版本是基于Spring Boot框架实现的,它是一种现代Web服务设计模式,强调了资源的状态转换,使得API设计更加清晰、简洁且高效。本文将深入探讨RESTful风格在Java开发中的应用,以及如何利用Spring ...

    ssm框架整合restful风格案例

    在“ssm框架整合restful风格案例”中,开发者已经成功地将这三者融合,创建了一个完整的Web应用。MySQL数据库在这里扮演了数据存储的角色,开发者可能使用了JDBC驱动或MyBatis的SqlSession来执行SQL语句。案例中的...

    CXF restful风格WebService

    **一、RESTful风格的理解** REST(Representational State Transfer,表述性状态转移)是一种网络应用程序的设计风格和开发方式,基于HTTP协议,强调资源的概念,通过URI(统一资源标识符)来定位资源,使用标准的...

    springMVC整合FastJson实现RestFul风格API涉及jar包

    首先,理解RESTful风格的API至关重要。REST(Representational State Transfer,表述性状态转移)是一种网络应用程序的设计风格和开发方式,基于HTTP协议,强调资源的表示和操作。在RESTful API中,每个URL代表一个...

    ssm项目,包含restful风格 的增删改查

    SSM项目,全称是Spring、SpringMVC和MyBatis的组合,是Java后端开发中常用的三大框架。...通过这个项目,开发者不仅可以学习到如何使用SSM框架,还能深入理解RESTful风格的API设计,为日后的开发工作打下坚实的基础。

    基于SpringBoot+Mybatis PageHelper 分页+JAP +Restful风格的小案例

    本项目是一个以SpringBoot为核心框架,结合JPA(Java Persistence API)与Mybatis,利用PageHelper实现高效分页,并采用Restful风格设计API的实战案例。这个案例旨在帮助开发者快速理解如何在SpringBoot环境下整合...

    简洁的SSM框架+restful风格

    综上所述,这个项目使用了SSM框架结合RESTful风格,构建了一个现代化的Java Web应用。开发者可以利用Spring进行依赖管理和业务处理,SpringMVC处理Web请求,MyBatis处理数据库操作,而Maven则负责项目的构建和依赖...

    restful接口示例代码

    RESTful接口是一种遵循REST(Representational State Transfer,表述性状态转移)架构约束的Web服务设计风格,用于构建可扩展、高性能的互联网应用程序。REST强调通过HTTP协议中的动词(GET、POST、PUT、DELETE等)...

    springboot restful风格项目demo

    在本项目中,"springboot restful风格项目demo" 是一个基于Spring Boot框架构建的Web应用,它采用了RESTful架构风格来设计API接口。REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式...

Global site tag (gtag.js) - Google Analytics