一、定义

1、起源

  • 来源:Roy Fielding的博士论文。
  • 目的:理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。
  • 定义:一种实现软件通信的架构风格、设计风格,而不是标准;提供了一组设计原则和约束条件。
  • 用处:提供一种架构风格,目前也有很多相关实现,我们可以理解这种风格,借助这些实现来实现一个良好通信软件架构。

2、定义

REST的名称解释:

SOAP:简单对象访问协议(英文:Simple Object Access Protocol,简称SOAP)。

REST:表述性状态传递(英文:Representational State Transfer,简称REST)。

REST是比SOAP更简单的一个Web应用可选方案。

REST是一种面向资源的架构风格,强调描述应用程序的事物和名词。

  • Representational :表述性,REST资源可以使用各种不同的形式进行表述,如XML,JSON,HTML;
  • State:状态,使用REST的时候,我们关注的是资源的状态,而不是行为;
  • Transfer:转移,REST的资源,通过某种形式的表述,在应用之间传递转移。

简洁地说,REST就是将资源的状态,以最合适客户端或服务器的表述方式,在服务器与客户端之间转移。

REST与HTTP方法:

URL:REST中,资源通过URL定位和识别。虽然没有严格的URL格式定义,但是一个URL应该能识别资源,而不是简单的一个命令。因为REST的核心是资源,而不是行为。

行为:REST中也有行为,但是不是在URL中体现,一般通过HTTP行为来定义,例如CRUD

  • Creat:POST
  • Read:GET
  • Update:PUT/PATCH
  • Delete:Delete

最佳实践

RESTful API的设计实践

可以参考这篇文章,翻译得很好:https://www.cnblogs.com/moonz-wu/p/4211626.html

也可以参考这个网站的API介绍:https://onlinehelp.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref.htm

我的总结:

1、动词的使用场景

  • GET(选择):从服务器上获取一个具体的资源或者一个资源列表。
  • POST(创建): 在服务器上创建一个新的资源。
  • PUT(更新):以整体的方式更新服务器上的一个资源。
  • PATCH(更新):只更新服务器上一个资源的一个属性。
  • DELETE(删除):删除服务器上的一个资源

2、使用api根和版本管理

  • https://example.org/api/v1/*
  • https://api.example.com/v1/*

3、使用复数代表集合

  • www.xx.com/api/v1/products

4、使用小写和-分隔符

  • www.xx.com/api/v1/product-types

5、使用过滤器传递参数

  • ?sort-by=name&order=asc

6、同级数据使用...进行分割

  • www.xx.com/api/v1/compare/a...b...c

实际应用:

  • 增加商品[POST]/api/v1/products/p-id
  • 修改商品[PUT]/api/v1/products/p-id
  • 删除商品[DELETE]/api/v1/products/p-id
  • 审核商品[POST]/api/v1/products/p-id/post
  • 反审核商品[DELETE]/api/v1/products/p-id/post
  • 失效商品[POST]/api/v1/products/p-id/cancel
  • 查询商品(使用ID)[GET]/api/v1/products/p-id
  • 查询商品(使用编码)[GET]/api/v1/products/p-id?code=编号
  • 商品列表(分页,参数)[GET]/api/v1/products?page-no=1&page-size=10&sort=code:asc,name:desc,qty:asc&filter=name:eq:名称条件,code:eq:名称条件
  • 商品列表(分页,参数,给APP使用)[GET]/api/v1/products?type=app&page-no=1&page-size=10&sort=code:asc,name:desc,qty:asc&search:eq:查找信息

【已转移】【Java架构:系统架构理论】一篇文章搞掂:RESTful的更多相关文章

  1. 【已转移】【Java架构:基础技术】一篇文章搞掂:Java 8

    本文篇幅较长,建议合理利用右上角目录进行查看(如果没有目录请刷新). 一.Java的历史与演变 目的:为完全了解Java,需要理解Java的诞生原因.成型动力以及他继承的思想. 计算机语言的创新与发展 ...

  2. Java Web系统架构概览

    大型网站系统架构的演进都是随着业务增长不断演进,所有的出发点都是为了满足业务需求.最初访问量下,功能简单时,单体软件可以解决所有问题:后来访问量逐渐增大,功能愈加丰富,此时单体软件的架构逐渐成为开发和 ...

  3. 【进阶技术】一篇文章搞掂:Spring高级编程

    本文篇幅较长,建议合理利用右上角目录进行查看(如果没有目录请刷新). 本文基于<Spring5高级编程>一书进行总结和扩展,大家也可以自行研读此书. 十一.任务调度 任务调度主要由三部分组 ...

  4. 【已转移】【Java架构:基础技术】一篇文章搞掂:Spring

    本文篇幅较长,建议合理利用右上角目录进行查看(如果没有目录请刷新). 本文是对<SPRING实战第4版>的总结,大家也可以去仔细研读该书 [------------------------ ...

  5. 【已转移】【Java架构:基础技术】一篇文章搞掂:SVN

    一个例子: 公司的SVN代码中,含有target等文件夹,每次生成运行后,有很多文件打扰签入 处理方案: 1.CheckOut时,点击ChooseItems选项,不要选择这些target文件夹(有点麻 ...

  6. 【Java架构:持续交付】一篇文章搞掂:持续交付理论

    一.持续集成.持续交付.DevOps概念,关系等 持续集成(Continuous integration/CI) 持续交付(Continuous delivery/CD) 持续部署() 持续 (Con ...

  7. JAVA各种系统架构图及其简介

    1.spring架构图 Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框 ...

  8. 【Java架构:基础技术】一篇文章搞掂:MyBatis

    本文篇幅较长,建议合理利用右上角目录进行查看(如果没有目录请刷新). 本文主要总结于刘增辉的<MyBatisc从入门到精通>一书,有兴趣的朋友可以自行研读 建议仔细研读官方文档: http ...

  9. 【Java架构:基础技术】一篇文章搞掂:Spring Boot 官方文档解读

    本文篇幅较长,建议合理利用右上角目录进行查看(如果没有目录请刷新). 本文内容大部分是翻译和总结官方文档,可以到https://docs.spring.io/spring-boot/docs查看(此地 ...

随机推荐

  1. 数模常用算法系列Matlab实现-----线性规划

    线性规划的 Matlab 标准形式 线性规划的目标函数可以是求最大值,也可以是求最小值,约束条件的不等号可以是小于号也可以是大于号.为了避免这种形式多样性带来的不便,Matlab 中规定线性 规划的标 ...

  2. [19/05/18-星期六] HTML_form标签

    一.form标签(一) <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> & ...

  3. SpringBoot(七) -- 嵌入式Servlet容器

    一.嵌入式Servlet容器 在传统的开发中,我们在完成开发后需要将项目打成war包,在外部配置好TomCat容器,而这个TomCat就是Servlet容器.在使用SpringBoot开发时,我们无需 ...

  4. 《Cascaded Pyramid Network for Multi-Person Pose Estimation》论文阅读及复现笔记

    一.PipeLine 要点 TopDown + GlobalNet + RefineNet 二.Motivation 通过提高对难以识别的关键点的识别准确率,来提升总体识别准确率. 方法:1.refi ...

  5. regularexpressionvalidator验证控件使用实例

    一:电话号码验证: 格式如:0755-24256888:带分机格式:0755-24256888-282:手机:11位数字 (^(\d{3,4}-)?\d{6,8}$)|(^(\d{3,4}-)?\d{ ...

  6. 解决本地mysql服务允许被外部主机连接

    今天在网上百度看了怎么使用外部主机连接本地MySQL服务,发现大多的说法都是不全面的,试了好久,整理下: 1.现创建了一个mysql用户,并赋予常用的操作权限 CREATE USER 'mysql'@ ...

  7. ES6——generator

    generator 生成器函数 普通函数,一路到底 generator函数,中间可以停,到哪停呢,用 yield 配合,交出执行权 yield 有 放弃.退让.退位的意思 需要调用next()方法启动 ...

  8. C# 实现实体类和Xml转换

    一.实体类转换成XML 将实体类转换成XML需要使用XmlSerializer类的Serialize方法,将实体类序列化 public static string XmlSerialize<T& ...

  9. ubuntu移动分区,修改目录挂在点

    由于/tmp目录空间有点小,导致安装一个大软件的时候提示/tmp空间不足,最后通过创建新分区,并将新分区挂在到/tmp下,把/tmp空间扩大. 安装gparted 输入如下命令: sudo apt-g ...

  10. linux系统安装telnet服务

    linux安装telnet 安装前准备工作 1.安装telnet服务需要三个软件包:telnet.telnet-server和xinetd包. telnet,telnet-sever,xinetd软件 ...