微服务接口设计(RESTful规范)
微服务的接口设计(RESTful规范)
基本知识
- URI:在RESTful架构中,每个URI代表一种资源
- URI规范:
- 不用大写
- 用中杠-,不用下划线_
- 路径中不能有动词,只能有名词
- 名词表示资源集合,要使用复数形式
- 通过标准HTTP方法对资源进行CRUD(将服务行为映射到标准HTTP动词)
- CRUD:增加(Create)、检索(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写
- GET(SELECT):从服务器取出/请求资源
- POST(CREATE):在服务器新建资源
- PUT(UPDATE):在服务器更新资源
- DELETE:从服务器删除资源
- 使用JSON作为微服务提交和返回数据的通用语言
- 使用HTTP状态码来传达服务调用的状态
示例:
服务器维护资源如下(使用一张表存用户信息)
一般每种资源都会设计字段id来做唯一标识,便于请求资源
User {
int id;
int age;
bool sex;
String phone;
role String;
...
}
该资源的URI设计为
ip:port/service-name/users
获取全部用户的信息
GET ip:port/service-name/users
创建一个用户
POST ip:port/service-name/users
获取某个用户的信息
GET ip:port/service-name/users/id
修改某个用户的信息
PUT ip:port/service-name/users
删除某个用户的信息
DEL ip:port/service-name/users/id
错误设计如下:
创建一个用户
POST ip:port/service-name/users/add
获取某个用户的信息
GET ip:port/service-name/users/id/get
修改某个用户的信息
PUT ip:port/service-name/users/change
有时请求中需要带有很多条件,这些条件可以放在RequestParam(query)里。
比如用户管理B端,做分页展示时,如果每页展示20个用户,接口的设计可能为
GET ip:port/service-name/users?offset=xxx&limit=20
比如返回所有管理员权限的用户,接口的设计可能为
GET ip:port/service-name/users?role=admin
当然,上述只是规范,实际开发中可能会有很多api的设计会突破RESTful规范。
注意保证幂等
幂等:请求一次和请求多次的效果是一样的。
GET:由于GET请求仅仅是获取资源 并不修改资源,所以能保证幂等
PUT:同样的请求,修改一次和修改多次是一样的,能保证幂等
DEL:同理,能保证幂等。但是多次请求,只有第一次能返回200,其他都应该是404
POST:不幂等,多次请求会在数据库表中生成多条记录
微服务接口设计(RESTful规范)的更多相关文章
- Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战
Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战 说明: Java生鲜系统中微服务的拆分应该如何架构设计与分析呢?以下是我的实战中的设计与经验分析. 目录 1. 微服务简介2. 当前现状3. ...
- (转)微服务架构 互联网保险O2O平台微服务架构设计
http://www.cnblogs.com/Leo_wl/p/5049722.html 微服务架构 互联网保险O2O平台微服务架构设计 关于架构,笔者认为并不是越复杂越好,而是相反,简单就是硬道理也 ...
- 【SpringCloud】03.微服务的设计原则
微服务的设计原则: 一.AKF拆分原则 业界对于可扩展的系统架构设计有一个朴素的理念:通过加机器就可以解决容量和可用性问题(如果一台不行就两台). Y轴(功能)--关注应用中功能划分,基于不同的业务拆 ...
- Spring Cloud微服务如何设计异常处理机制?
导读 今天和大家聊一下在采用Spring Cloud进行微服务架构设计时,微服务之间调用时异常处理机制应该如何设计的问题.我们知道在进行微服务架构设计时,一个微服务一般来说不可避免地会同时面向内部和外 ...
- 基于华为云CSE微服务接口兼容常见问题
微服务接口兼容常见问题 在进行微服务持续迭代开发的过程中,由于新特性在不停的加入,一些过时的特性在不停的修改,接口兼容问题面临巨大的挑战,特别是在运行环境多版本共存(灰度发布)的情况下.本章节主要描述 ...
- Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战
Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战 Java生鲜电商平台- 什么是秒杀 通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动 比如说京东秒杀,就是一种定时定量秒杀,在规定 ...
- 花了三天整理,Spring Cloud微服务如何设计异常处理机制?还看不懂算我输
前言 首先说一下为什么发这篇文章,是这样的.之前和粉丝聊天的时候有聊到在采用Spring Cloud进行微服务架构设计时,微服务之间调用时异常处理机制应该如何设计的问题.我们知道在进行微服务架构设计时 ...
- 微服务从设计到部署(二)使用 API 网关
链接:https://github.com/oopsguy/microservices-from-design-to-deployment-chinese 译者:Oopsguy 本书的七个章节是关于设 ...
- 基于Spring-Cloud的微服务框架设计
基于Spring-Cloud的微服务框架设计 先进行大的整体的框架整理,然后在针对每一项进行具体的详细介绍
随机推荐
- 如何让矢量瓦片配图神器maputnik支持 geoserver
关键词:maputnik.geoserver.矢量地图.矢量瓦片.mapbox.mapboxgl.地图配图.地图配色 一直想搞一个类似百度.高德地图那样的矢量地图配图工具 百度个性化地图配图工具: 高 ...
- 解决SpringBoot 定时计划 quartz job 任务重复执行多次(10次)
上一篇:SpringBoot多任务Quartz动态管理Scheduler,时间配置,页面+源 设置了多个 任务,本应该是各司其职的,任务调用多线程处理任务,but这个定时任务竟然同时跑了10次???如 ...
- Django 中实现连接多个数据库并实现读写分离
读写分离 其基本原理就是让主数据库处理事务性增,改,删操作(INSERT,UPDATE,DELETE)操作,而从数据库处理SELECT查询操作,数据库复制被用来把事物性操作导致的变更同步到其他从数据库 ...
- 【二分】CF Round #587 (Div. 3)E2 Numerical Sequence (hard version)
题目大意 有一个无限长的数字序列,其组成为1 1 2 1 2 3 1.......1 2 ... n...,即重复的1~1,1~2....1~n,给你一个\(k\),求第\(k(k<=10^{1 ...
- Go 安装配置golint
原文链接:http://zhoubotong.site/post/3.html一. Golint介绍 Golint 是一个源码检测工具用于检测代码规范 Golint 不同于gofmt, Gofmt用于 ...
- TCP/IP的十个问题
一.TCP/IP模型 TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的 ...
- HTML5/HTML 4.01/XHTML 元素和有效的 DTD
HTML5/HTML 4.01/XHTML 元素和有效的 DTD 下面的表格列出了所有的 HTML5/HTML 4.01/XHTML 元素,以及它们会出现在什么文档类型 (DTD) 中: 标签 HTM ...
- date命令之移动修改日志日期
[16:19:50 root@C8[ 2020-06-16DIR]#touch app.log [16:21:25 root@C8[ 2020-06-16DIR]#ll total 0 -rw-r-- ...
- Linux基础命令列表
命令列表 A alias apt apt-get arp -n -s arping ab B bc basename bash -n -x bzip2 bunzip2 bzcat blkid brct ...
- CentOS8 安装
CentOS8 1911 下载 https://mirrors.aliyun.com/centos/8/isos/x86_64/CentOS-8.1.1911-x86_64-dvd1.iso Step ...