文档章节

【转】URI设计原则,你设计的API做到了么?

AllenOR灵感
 AllenOR灵感
发布于 2017/09/10 01:26
字数 456
阅读 2
收藏 0

咱们设计的REST API真的nice么?

优雅型:http://api.exapmle.com/louvre/da-vinci/mona-lisa
卢浮宫/达芬奇/蒙娜丽莎
中庸型:http://58.com/bj/ershou/310976
北京/二手频道/帖子ID
谢特型:http://api.example.com/68dd0-a9d3-11e0-9f1c
不知道什么鬼

本文将分享URI设计的一些原则。

1. URI的末尾不要添加“/”

多一个斜杠,语义完全不同,究竟是目录,还是资源,还是不确定而多做一次301跳转?

负面case:http://api.canvas.com/shapes/
正面case:http://api.canvas.com/shapes

2. 使用“-”提高URI的可读性

目的是使得URI便于理解,用“-”来连接单词

正面case:http://api.example.com/blogs/my-first-post

3. 禁止在URL中使用“_”

目的是提高可读性,“_”可能被文本查看器中的下划线特效遮蔽

负面case:http://api.example.com/blogs/my_first_post
别争,看到效果就明白了

4. 禁止使用大写字母

RFC 3986中规定URI区分大小写,但别用大写字母来为难程序员了,既不美观,又麻烦

负面case:http://api.example.com/My-Folder/My-Doc
正面case:http://api.example.com/my-folder/my-doc

5. 不要在URI中包含扩展名

应鼓励REST API客户端使用HTTP提供的格式选择机制Accept request header

正面case:http://58.com/bj/ershou/310976
负面case:http://58.com/bj/ershou/310976x.shtml

6. 建议URI中的名称使用复数

额,楼主不知道为何会有这么奇怪的建议

正面case:http://api.college.com/students/3248234/courses
负面case:http://api.college.com/student/3248234/course

最后,给后端研发工程师一个建议:清晰优雅的 RESTful API是为调用者编写的,别无脑随意定义一些shit一样的URI给移动/前端工程师使用,小心生命有危险。

原文:http://blog.restcase.com/7-rules-for-rest-api-uri-design/
作者:Guy Levin


来源:架构师之路

本文转载自:http://www.jianshu.com/p/0805a2c672e5

共有 人打赏支持
AllenOR灵感
粉丝 11
博文 2635
码字总数 83001
作品 0
程序员
私信 提问
深入理解什么是RESTful API ?

前言:最近两年很火爆的网络框架Retrofit,使用它的时候,查看文档会告诉你,要求后台的服务器哥们必须符合REST规范给你设计接口,作为安卓开发工程师来说,我就很奇怪了,REST规范到底是啥?...

aweiloveandroid
2017/06/24
0
0
总结常见的违背Rest原则的接口设计做法

此文已由作者郑华斌授权网易云社区发布。 REST这词我们常常挂在嘴边,比如“开发一个rest接口”,又比如Spring项目的代码: @RestControllerpublic class CommonController { @RequestMappi...

网易云
12/11
0
0
REST风格的一点理解

REST的全称是表述性状态转移,它是一种架构设计风格。状态转移说的是在客户端和服务器端之间转移代表资源状态的表述 REST的主要原则包括:URL表示资源、HTTP方法表示操作。GET/POST/PUT/DELE...

技术小牛人
2017/11/01
0
0
(转)理解RESTful架构

越来越多的人开始意识到,网站即软件,而且是一种新型的软件。 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency)、高并发等特点。 ...

最王座
2016/07/14
30
0
初识---转理解RESTful架构

越来越多的人开始意识到,网站即软件,而且是一种新型的软件。 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency)、高并发等特点。 ...

DanyCoder
03/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

[LintCode] Serialize and Deserialize Binary Tree(二叉树的序列化和反序列化)

描述 设计一个算法,并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”。 如何反序列化或序列化二叉树是没有限制的,你...

honeymose
10分钟前
0
0
java框架学习日志-7(静态代理和JDK代理)

静态代理 我们平时去餐厅吃饭,不是直接告诉厨师做什么菜的,而是先告诉服务员点什么菜,然后由服务员传到给厨师,相当于服务员是厨师的代理,我们通过代理让厨师炒菜,这就是代理模式。代理...

白话
今天
22
0
Flink Window

1.Flink窗口 Window Assigner分配器。 窗口可以是时间驱动的(Time Window,例如:每30秒钟),也可以是数据驱动的(Count Window,例如:每一百个元素)。 一种经典的窗口分类可以分成: 翻...

满小茂
今天
17
0
my.ini

1

architect刘源源
今天
15
0
docker dns

There is a opensource application that solves this issue, it's called DNS Proxy Server It's a DNS server that solves containers hostnames, if could not found a hostname that mat......

kut
今天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部