微服务的接口设计(RESTful规范)

基本知识

  • URI:在RESTful架构中,每个URI代表一种资源
  • URI规范:
    1. 不用大写
    2. 用中杠-,不用下划线_
    3. 路径中不能有动词,只能有名词
    4. 名词表示资源集合,要使用复数形式
  • 通过标准HTTP方法对资源进行CRUD(将服务行为映射到标准HTTP动词)
    1. CRUD:增加(Create)、检索(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写
    2. GET(SELECT):从服务器取出/请求资源
    3. POST(CREATE):在服务器新建资源
    4. PUT(UPDATE):在服务器更新资源
    5. 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规范)的更多相关文章

  1. Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战

    Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战 说明: Java生鲜系统中微服务的拆分应该如何架构设计与分析呢?以下是我的实战中的设计与经验分析. 目录 1. 微服务简介2. 当前现状3. ...

  2. (转)微服务架构 互联网保险O2O平台微服务架构设计

    http://www.cnblogs.com/Leo_wl/p/5049722.html 微服务架构 互联网保险O2O平台微服务架构设计 关于架构,笔者认为并不是越复杂越好,而是相反,简单就是硬道理也 ...

  3. 【SpringCloud】03.微服务的设计原则

    微服务的设计原则: 一.AKF拆分原则 业界对于可扩展的系统架构设计有一个朴素的理念:通过加机器就可以解决容量和可用性问题(如果一台不行就两台). Y轴(功能)--关注应用中功能划分,基于不同的业务拆 ...

  4. Spring Cloud微服务如何设计异常处理机制?

    导读 今天和大家聊一下在采用Spring Cloud进行微服务架构设计时,微服务之间调用时异常处理机制应该如何设计的问题.我们知道在进行微服务架构设计时,一个微服务一般来说不可避免地会同时面向内部和外 ...

  5. 基于华为云CSE微服务接口兼容常见问题

    微服务接口兼容常见问题 在进行微服务持续迭代开发的过程中,由于新特性在不停的加入,一些过时的特性在不停的修改,接口兼容问题面临巨大的挑战,特别是在运行环境多版本共存(灰度发布)的情况下.本章节主要描述 ...

  6. Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战

    Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战 Java生鲜电商平台-  什么是秒杀 通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动 比如说京东秒杀,就是一种定时定量秒杀,在规定 ...

  7. 花了三天整理,Spring Cloud微服务如何设计异常处理机制?还看不懂算我输

    前言 首先说一下为什么发这篇文章,是这样的.之前和粉丝聊天的时候有聊到在采用Spring Cloud进行微服务架构设计时,微服务之间调用时异常处理机制应该如何设计的问题.我们知道在进行微服务架构设计时 ...

  8. 微服务从设计到部署(二)使用 API 网关

    链接:https://github.com/oopsguy/microservices-from-design-to-deployment-chinese 译者:Oopsguy 本书的七个章节是关于设 ...

  9. 基于Spring-Cloud的微服务框架设计

    基于Spring-Cloud的微服务框架设计 先进行大的整体的框架整理,然后在针对每一项进行具体的详细介绍

随机推荐

  1. S3C6410 LCD驱动分析(转)

    一. 理论分析1. 几个概念:FIMC :    Fully Interactive Mobile Camera (完全交互式移动摄像机)FIMD:     Fully Interactive Mob ...

  2. leaflet如何加载10万数据

    作为一名GIS开发者,你工作中一定遇到过这种问题,根据业务设计,需要在地图上添加1万+条数据,数据或是点.或是线.或是面.但不管哪种,当你添加到5000条时,地图操作就会出现明显的卡顿.当你添加超过1 ...

  3. MeteoInfoLab脚本示例:计算不同区域平均值

    这里用美国做例子,有一个美国区域的格点温度场数据(usgrid.data),需要计算出每个州(state)的平均温度.当然需要有一个包含各州行政区域的shape文件了(相关文件可以在此帖中下载:htt ...

  4. laravel设置excel高度

    <?php use App\Services\UploadService; use Maatwebsite\Excel\Facades\Excel; class ExcelTest extend ...

  5. ansible用authorized_key模块批量推送密钥到受控主机(免密登录)(ansible2.9.5)

    一,ansible的authorized_key模块的用途 用来配置密钥实现免密登录: ansible所在的主控机生成密钥后,如何把公钥上传到受控端? 当然可以用ssh-copy-id命令逐台手动处理 ...

  6. requests-html添加header

    from requests_html import HTMLSession session = HTMLSession() headers = { "User-Agent":&qu ...

  7. Azure Kay Vault(一).NET Core Console App 获取密钥保管库中的机密信息

    一,引言 Azure 密钥保管库用于存储敏感信息,例如链接字符串,密码,API 密钥等.我们无法直接从Azure 密钥库中访问机密!那么我们如何才能访问应用程序中的机密信息?比如,在我们的实际项目中, ...

  8. 实战二:nacos服务注册与发现,openfeign服务调用

    一,参照上一篇创建好微服务结构后,按业务需求编写各微服务逻辑 二,服务注册 1,安装nacos:下载,解压,运行startup.cmd 2,访问 http://localhost:8848/nacos ...

  9. python中的多(liu)元(mang)交换 ,赋值

    多元赋值 顾名思义 同时对多个变量赋值 长话短说 举例: int x = 1 int y = 2 x,y = y ,x 这种写法可以直接交换x,y的值 非常方(liu)便(mang) 也就是 y=1 ...

  10. 一篇理解什么是CanSet, CanAddr?

    什么是可设置( CanSet ) 首先需要先明确下,可设置是针对 reflect.Value 的.普通的变量要转变成为 reflect.Value 需要先使用 reflect.ValueOf() 来进 ...