微服务接口设计(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的微服务框架设计 先进行大的整体的框架整理,然后在针对每一项进行具体的详细介绍
随机推荐
- S3C6410 LCD驱动分析(转)
一. 理论分析1. 几个概念:FIMC : Fully Interactive Mobile Camera (完全交互式移动摄像机)FIMD: Fully Interactive Mob ...
- leaflet如何加载10万数据
作为一名GIS开发者,你工作中一定遇到过这种问题,根据业务设计,需要在地图上添加1万+条数据,数据或是点.或是线.或是面.但不管哪种,当你添加到5000条时,地图操作就会出现明显的卡顿.当你添加超过1 ...
- MeteoInfoLab脚本示例:计算不同区域平均值
这里用美国做例子,有一个美国区域的格点温度场数据(usgrid.data),需要计算出每个州(state)的平均温度.当然需要有一个包含各州行政区域的shape文件了(相关文件可以在此帖中下载:htt ...
- laravel设置excel高度
<?php use App\Services\UploadService; use Maatwebsite\Excel\Facades\Excel; class ExcelTest extend ...
- ansible用authorized_key模块批量推送密钥到受控主机(免密登录)(ansible2.9.5)
一,ansible的authorized_key模块的用途 用来配置密钥实现免密登录: ansible所在的主控机生成密钥后,如何把公钥上传到受控端? 当然可以用ssh-copy-id命令逐台手动处理 ...
- requests-html添加header
from requests_html import HTMLSession session = HTMLSession() headers = { "User-Agent":&qu ...
- Azure Kay Vault(一).NET Core Console App 获取密钥保管库中的机密信息
一,引言 Azure 密钥保管库用于存储敏感信息,例如链接字符串,密码,API 密钥等.我们无法直接从Azure 密钥库中访问机密!那么我们如何才能访问应用程序中的机密信息?比如,在我们的实际项目中, ...
- 实战二:nacos服务注册与发现,openfeign服务调用
一,参照上一篇创建好微服务结构后,按业务需求编写各微服务逻辑 二,服务注册 1,安装nacos:下载,解压,运行startup.cmd 2,访问 http://localhost:8848/nacos ...
- python中的多(liu)元(mang)交换 ,赋值
多元赋值 顾名思义 同时对多个变量赋值 长话短说 举例: int x = 1 int y = 2 x,y = y ,x 这种写法可以直接交换x,y的值 非常方(liu)便(mang) 也就是 y=1 ...
- 一篇理解什么是CanSet, CanAddr?
什么是可设置( CanSet ) 首先需要先明确下,可设置是针对 reflect.Value 的.普通的变量要转变成为 reflect.Value 需要先使用 reflect.ValueOf() 来进 ...