文档章节

RestAPI 设计

Geeyu
 Geeyu
发布于 2017/06/01 11:01
字数 277
阅读 17
收藏 0

RESTful API 设计最佳实践

使用 restful api 作为 web api,需要注意的如下几点

参考 OpenStack 的 port api 设计

使用名词定义接口,且是名词复数

对于获取所有用户,应该使用
    /users

不应该使用
    /getAllUsers

使用子资源来表达资源间的关系,如下表示id24的用户拥有的车子
    /users/24/cars

GET 方法和查询参数不能改变资源状态

如果要改变资源的状态,使用 PUT, POST 和 DELETE。

API 版本化

版本号使用简单的序号,并避免点符号,如2.5等。正确用法如下:

    /blog/api/v1

使用 HATEOAS 约束

当服务器发生了变化时,客户端并不需要做出修改,因为资源的 URI 和其他信息都是动态发现的。

    {
      "id": 711,
      "manufacturer": "bmw",
      "model": "X5",
      "seats": 5,
      "drivers": [
       {
        "id": "23",
        "name": "Stefan Jauker",
        "links": [
         {
         "rel": "self",
         "href": "/api/v1/drivers/23"
        }
       ]
      }
     ]
    }

提供过滤、排序、字段选择、分页

过滤:
    GET /cars?color=red 
    GET /cars?seats<=2

排序:
    GET /cars?sort=-manufactorer,+model

字段选择:
    GET /cars?fields=manufacturer,model,id,color

分页:
    GET /cars?offset=10&limit=5

© 著作权归作者所有

下一篇: Swagger注解
Geeyu
粉丝 3
博文 57
码字总数 30351
作品 0
昌平
私信 提问
RestAPI设计疑问

平台:java 1. 对于RestApi 设计时是否需要把model(实体类)暴露给使用方 业界一般怎么做的 如果不暴露 仅仅依靠契约 那么提供方每一次修改 对于使用方来说岂不是要了命 而且使用方八成也会...

ZeRur_
2016/09/17
269
2
基于 Spring + Dubbo 开发分布式REST服务实战

本课程主要是使用 Spring技术栈 + dubbo 开发一个类似当当的图书电商后台的实战教程。 课程特点: 1.课程的技术体系足够系统、全面以及细致:课程中涉及的主要技术包括: Spring IO (依赖版本...

登录404
2017/05/17
1K
3
后台服务框架--JavaBaas

JavaBaas 是基于Java语言开发的后台服务框架,其核心设计目标是实现移动客户端、网页应用的后台数据存储、物理文件存储、消息推送等功能,极大的降低后台开发难度,实现快速开发。 使用 Java...

Codi
2016/03/30
3.3K
1
基于 Fetch API 封装的 HTTP Client--Fetch HTTP Client

一个基于 Fetch API 封装的 HTTP Client,可用于浏览器及其他兼容环境中,设计之初是为了ReactJS和ReactNative访问后端RestAPI使用。比其他基于Fetch API的封装优势在于,它的中间件机制支持...

烫烫烫烫烫烫
2016/11/07
528
0
SpringBoot项目web端请求其他的微服务提供的RestApi

SpringBoot项目web端请求其他的微服务提供的RestApi 目前我想到的有两种方案: 1. 在web端写controller采用RestTemplate方式请求其他的微服务RestApi,然后页面请求web端体提供的controller,...

微风徐徐
2016/11/20
920
2

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
2.1K
14
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
38
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
61
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部