【已转移】【Java架构:系统架构理论】一篇文章搞掂:RESTful
一、定义
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的更多相关文章
- 【已转移】【Java架构:基础技术】一篇文章搞掂:Java 8
本文篇幅较长,建议合理利用右上角目录进行查看(如果没有目录请刷新). 一.Java的历史与演变 目的:为完全了解Java,需要理解Java的诞生原因.成型动力以及他继承的思想. 计算机语言的创新与发展 ...
- Java Web系统架构概览
大型网站系统架构的演进都是随着业务增长不断演进,所有的出发点都是为了满足业务需求.最初访问量下,功能简单时,单体软件可以解决所有问题:后来访问量逐渐增大,功能愈加丰富,此时单体软件的架构逐渐成为开发和 ...
- 【进阶技术】一篇文章搞掂:Spring高级编程
本文篇幅较长,建议合理利用右上角目录进行查看(如果没有目录请刷新). 本文基于<Spring5高级编程>一书进行总结和扩展,大家也可以自行研读此书. 十一.任务调度 任务调度主要由三部分组 ...
- 【已转移】【Java架构:基础技术】一篇文章搞掂:Spring
本文篇幅较长,建议合理利用右上角目录进行查看(如果没有目录请刷新). 本文是对<SPRING实战第4版>的总结,大家也可以去仔细研读该书 [------------------------ ...
- 【已转移】【Java架构:基础技术】一篇文章搞掂:SVN
一个例子: 公司的SVN代码中,含有target等文件夹,每次生成运行后,有很多文件打扰签入 处理方案: 1.CheckOut时,点击ChooseItems选项,不要选择这些target文件夹(有点麻 ...
- 【Java架构:持续交付】一篇文章搞掂:持续交付理论
一.持续集成.持续交付.DevOps概念,关系等 持续集成(Continuous integration/CI) 持续交付(Continuous delivery/CD) 持续部署() 持续 (Con ...
- JAVA各种系统架构图及其简介
1.spring架构图 Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框 ...
- 【Java架构:基础技术】一篇文章搞掂:MyBatis
本文篇幅较长,建议合理利用右上角目录进行查看(如果没有目录请刷新). 本文主要总结于刘增辉的<MyBatisc从入门到精通>一书,有兴趣的朋友可以自行研读 建议仔细研读官方文档: http ...
- 【Java架构:基础技术】一篇文章搞掂:Spring Boot 官方文档解读
本文篇幅较长,建议合理利用右上角目录进行查看(如果没有目录请刷新). 本文内容大部分是翻译和总结官方文档,可以到https://docs.spring.io/spring-boot/docs查看(此地 ...
随机推荐
- 解决ajax跨域几种方式
发生跨域问题的原因: 浏览器的限制,出于安全考虑.前台可以正常访问后台,浏览器多管闲事报跨域问题,但其实前台已经访问到后台了. 跨域,协议.域名.端口任何一个不一样浏览器就认为是跨域. XHR(XML ...
- WPF使用Mutex创建单实例程序失效
vs2019 1.引入名称空间 using System.Threading; using System.Runtime.InteropServices; 2.导入dll并声明方法 [DllImpor ...
- [Git] 005 初识 Git 与 GitHub 之分支
在 GitHub 的 UI 界面使用 Git(多图警告) 1. 建立分支 1.1 点击左上方的 Branch: master,在输入框中填入分支名,再点击下方的 Create branch 1.2 此 ...
- Mybatis-基本步骤
1.1Mybatis框架概述 Mybatis是基于Java的持久层框架,内部封装了jdbc,使开发者只需关注sql语句本身,而不需要花费精力去处理加载驱动.创建连接.创建Statement等繁杂的过程 ...
- servlet到springmvc的演进
1.简单看看servlet 1.1.servlet继承关系 先看看下面servlet的这个继承关系,有点印象即可(可以暂时忽略ServletConfig,这个接口就是让我们可以从web.xml文件中拿 ...
- C# 同步调用 异步调用 异步回调 多线程的作用
同步调用 : 委托的Invoke方法用来进行同步调用.同步调用也可以叫阻塞调用,它将阻塞当前线程,然后执行调用,调用完毕后再继续向下进行. 异步调用 :同步调用会阻塞线程,如果是要调用一项繁重的 ...
- mysql中explain输出列之id的用法详解
参考mysql5.7 en manual,对列id的解释: The SELECT identifier. This is the sequential number of the SELECT wit ...
- Python之路-Python中的线程与进程
一.发展背景 任务调度 大部分操作系统(如Windows.Linux)的任务调度是采用时间片轮转的抢占式调度方式,也就是说一个任务执行一小段时间后强制暂停去执行下一个任务,每个任务轮流执行.任务执行的 ...
- JVM 运行时数据区域划分
目录 前言 什么是JVM JRE/JDK/JVM是什么关系 JVM执行程序的过程 JVM的生命周期 JVM垃圾回收 JVM的内存区域划分 一.运行时数据区包括哪几部分? 二.运行时数据区的每部分到底存 ...
- 【记录】form-data与x-www-form-urlencoded的区别
1)application/x-www-form-urlencoded 这应该是最常见的 POST 提交数据的方式了.浏览器的原生 <form> 表单,如果不设置 enctype 属性,那 ...