- 浏览: 7948100 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
在目前移动端、前端趋于统一的大背景下,基于 RESTFul 的 API 也大放异彩,我们需要越来越多的与 API 打交到,设计可扩展,易于维护的 API 在我们的工作中也变得更加重要。那么,有没有可能,通过一定测策略与指导方法,让 API 的设计更规范,更有章可循,高效率的设计出好用的 API 呢?本文尝试总结笔者在这方面的思考,希望对读者有所启发。
在开始之前,我们先做一个定义,那就是什么样的 API 能够算得上优秀的 API,如下是笔者认为优秀 API 需要满足的四个要素:
1. 遵循业界最佳实践
2. 高度的统一性和一致性,优秀的 API 一定是高度一致和统一的,遵循一定的共性和约定
3. 基于深刻理解业务的合理抽象
4. 探索业务共性,总结规范
这四个要素层层递进,亦可以作为我们进行 API 设计的指导方法,下面详细介绍笔者对这四个要素的理解,必要的时候提供案例进行说明。
遵循业界最佳实践
遵循业界最佳实践我觉得是优秀 API 应具备最基本的一个要素,它能让相关人员最快的理解,建立统一的基础认知,如果我们的 API 对外的,这就显得更加重要。
就本文而言,笔者所说的业内最佳实践指的是基于 HTTP 的 RESTful API。它用 URI 表示资源,用 HTTP Verb 表示操作,要设计好 RESTFul API,很大程度上需要处理好对资源的抽象。
至于 RESTFul API 更具体是个什么东西,有哪些原则,本文不做更多探讨,互联网上相关的资料很多。
高度的统一性和一致性
如果说遵循业界最佳实践是基础,那么保持 API 的统一性和一致性就是设计合格 API 的保障。如果我们的 API 不统一、不一致,缺少必要约定,使用者必然会感到困惑,学习成本与维护成本必然大大增加。
下面是保证 API 高度统一和一致性需要考虑的一个列表,也许并不完整:
1. 授权与鉴权方式的统一
2. 每个 API 分页方式与对应参数的统一
3. 排序参数与对应行为的统一一致
4. 查询条件的写法经事先约定且保持一致
5. 考虑存在于全局的参数,形成基础认知
6. 等等等
深度理解业务的高度抽象
如果我们的 API 满足了前面两个要素,那它应该基本算是合格了,能够满足日常业务的需要,但对于优秀的 API,这才刚刚开始。
许多人在设计 API 的时候,没有大局观,仅仅为界面而设计,只有前台界面一变化,API 可能又需要重新设计,从而导致 API 扩展性差,频繁修改。
所以,我们在设计 API 的时候,就需要站在更高的维度,在深入理解业务的前提下,抽象出更高层次的 API。这样的 API 一般是界面无关的,即便界面变化,只要不是业务的调整,影响也不会很大。
优秀的 API 就像优秀的产品,不在于提供了多少 API (功能),而在于解决了多少问题。一个优秀的 API 能直接解决多个一般 API 才能解决的问题。
下面举一个例子:
假如,我们有这样一个需求,在一个博客系统中,我们需要获取全站访问最多和访问最少的文章,各n篇文章,应该怎样设计 API 呢?
有下面两个版本:
版本一:
提供两个API,如下:
GET /posts/most-viewed?limit=10 - 获取访问最多的文章
GET /posts/least-viewed?limit=10 - 获取访问最少的文章
版本二:
提供一个API,使用sort参数排序,间接实现需求
GET /posts?sort=total_views desc&limit=10 - 获取访问最多的文章
GET /posts?sort=total_views asc&limit=10 - 获取访问最少的文章
笔者认为,版本二会更好一些,直接使用已有 API 加排序完成需求,扩展性和抽象层次都更高。
探索业务共性,总结规范
每个业务都可能有它的共性,如果把这些共性提炼出来,形成规范,就会极大的提高 API 的设计及开发效率,API 的使用也会因此受益,因为整体 API 的理解会容易许多。
就比如笔者目前所在的公司,面临许多 toB 业务,有许许多多的聚合统计需求,如果把每个统计需求都写成单独的API,那 API 的数量恐怕浩如烟海,也很难维护。
所以,我们就在思考,如何把这些共性的统计需求就行抽象,总结成规范,变成 API 设计规范的一部分,从而指导 API 设计。
比如说,我们有如下的业务需求:
用户的状态(status)有 active, disabled 和 achieved 三种,需要统计满足条件用户三个状态各自的数量。
在我们目前API设计规范下,我们会用如下的方式解决这个需求,而非提供新的 API:
GET /users?kw=foo&$aggregate=status 按 status 就行聚合统计,kw是查询参数
这里我们引入了 $aggregate 的聚合方法,在不添加新 API 的情况下解决该需求,该方式也变成解决该类问题规范。
设计优秀 API 的四个要素介绍完了,希望对你有所帮助,以后笔者会再分享 API 规范的设计思路~
2017年2月18日
在开始之前,我们先做一个定义,那就是什么样的 API 能够算得上优秀的 API,如下是笔者认为优秀 API 需要满足的四个要素:
1. 遵循业界最佳实践
2. 高度的统一性和一致性,优秀的 API 一定是高度一致和统一的,遵循一定的共性和约定
3. 基于深刻理解业务的合理抽象
4. 探索业务共性,总结规范
这四个要素层层递进,亦可以作为我们进行 API 设计的指导方法,下面详细介绍笔者对这四个要素的理解,必要的时候提供案例进行说明。
遵循业界最佳实践
遵循业界最佳实践我觉得是优秀 API 应具备最基本的一个要素,它能让相关人员最快的理解,建立统一的基础认知,如果我们的 API 对外的,这就显得更加重要。
就本文而言,笔者所说的业内最佳实践指的是基于 HTTP 的 RESTful API。它用 URI 表示资源,用 HTTP Verb 表示操作,要设计好 RESTFul API,很大程度上需要处理好对资源的抽象。
至于 RESTFul API 更具体是个什么东西,有哪些原则,本文不做更多探讨,互联网上相关的资料很多。
高度的统一性和一致性
如果说遵循业界最佳实践是基础,那么保持 API 的统一性和一致性就是设计合格 API 的保障。如果我们的 API 不统一、不一致,缺少必要约定,使用者必然会感到困惑,学习成本与维护成本必然大大增加。
下面是保证 API 高度统一和一致性需要考虑的一个列表,也许并不完整:
1. 授权与鉴权方式的统一
2. 每个 API 分页方式与对应参数的统一
3. 排序参数与对应行为的统一一致
4. 查询条件的写法经事先约定且保持一致
5. 考虑存在于全局的参数,形成基础认知
6. 等等等
深度理解业务的高度抽象
如果我们的 API 满足了前面两个要素,那它应该基本算是合格了,能够满足日常业务的需要,但对于优秀的 API,这才刚刚开始。
许多人在设计 API 的时候,没有大局观,仅仅为界面而设计,只有前台界面一变化,API 可能又需要重新设计,从而导致 API 扩展性差,频繁修改。
所以,我们在设计 API 的时候,就需要站在更高的维度,在深入理解业务的前提下,抽象出更高层次的 API。这样的 API 一般是界面无关的,即便界面变化,只要不是业务的调整,影响也不会很大。
优秀的 API 就像优秀的产品,不在于提供了多少 API (功能),而在于解决了多少问题。一个优秀的 API 能直接解决多个一般 API 才能解决的问题。
下面举一个例子:
假如,我们有这样一个需求,在一个博客系统中,我们需要获取全站访问最多和访问最少的文章,各n篇文章,应该怎样设计 API 呢?
有下面两个版本:
版本一:
提供两个API,如下:
GET /posts/most-viewed?limit=10 - 获取访问最多的文章
GET /posts/least-viewed?limit=10 - 获取访问最少的文章
版本二:
提供一个API,使用sort参数排序,间接实现需求
GET /posts?sort=total_views desc&limit=10 - 获取访问最多的文章
GET /posts?sort=total_views asc&limit=10 - 获取访问最少的文章
笔者认为,版本二会更好一些,直接使用已有 API 加排序完成需求,扩展性和抽象层次都更高。
探索业务共性,总结规范
每个业务都可能有它的共性,如果把这些共性提炼出来,形成规范,就会极大的提高 API 的设计及开发效率,API 的使用也会因此受益,因为整体 API 的理解会容易许多。
就比如笔者目前所在的公司,面临许多 toB 业务,有许许多多的聚合统计需求,如果把每个统计需求都写成单独的API,那 API 的数量恐怕浩如烟海,也很难维护。
所以,我们就在思考,如何把这些共性的统计需求就行抽象,总结成规范,变成 API 设计规范的一部分,从而指导 API 设计。
比如说,我们有如下的业务需求:
用户的状态(status)有 active, disabled 和 achieved 三种,需要统计满足条件用户三个状态各自的数量。
在我们目前API设计规范下,我们会用如下的方式解决这个需求,而非提供新的 API:
GET /users?kw=foo&$aggregate=status 按 status 就行聚合统计,kw是查询参数
这里我们引入了 $aggregate 的聚合方法,在不添加新 API 的情况下解决该需求,该方式也变成解决该类问题规范。
设计优秀 API 的四个要素介绍完了,希望对你有所帮助,以后笔者会再分享 API 规范的设计思路~
2017年2月18日
发表评论
-
复习:强迫线程顺序执行方式
2019-01-03 23:42 1586方法1: 三个线程,t1,t2,t3,如果一定要按顺序执行, ... -
(转)不错的前后端处理异常的方法
2019-01-02 23:16 2021前言 在 Web 开发中, 我们经常会需要处理各种异常, 这是 ... -
info q的极客时间大咖说等资料下载
2018-08-15 08:40 3474info q的极客时间大咖说等资料下载,还有不少思维导图 链 ... -
CXF 客户端超时时间设置(非Spring配置方式)
2018-07-03 22:38 2238import org.apache.cxf.endpoint. ... -
(转)synchronized关键字画像:正确打开方式
2018-06-14 09:25 492https://mp.weixin.qq.com/s/b3Sx ... -
CountDownLatch的例子
2018-06-13 14:10 694public class StatsDemo { ... -
两道面试题,带你解析Java类加载机制
2018-06-12 16:29 617https://mp.weixin.qq.com/s/YTa0 ... -
Spring中获取request的几种方法,及其线程安全性分析
2018-06-11 09:03 672https://mp.weixin.qq.com/s/KeFJ ... -
内部类小结
2018-06-06 10:25 439https://mp.weixin.qq.com/s/hErv ... -
JVM虚拟机小结1
2018-06-04 20:43 5451 jps -l //列出详细的类名和进程ID 2)jps ... -
windows下自带命令行工具查看CPU资源情况等
2018-06-04 12:53 3105微软提供了不少命令行 ... -
(收藏)深入分析Java的序列化与反序列化
2018-05-30 15:21 620https://mp.weixin.qq.com/s/T2Bn ... -
apache common包中的序列化工具
2018-05-30 09:10 1846什么是序列化 我们的 ... -
JAVA8 JVM的变化: 元空间(Metaspace)
2018-05-24 22:30 969本文将会分享至今为至我收集的关于永久代(Permanent G ... -
(转)服务器性能指标(一)——负载(Load)分析及问题排查
2018-05-21 21:03 1364原创: Hollis Hollis 负载 ... -
(转)对象复用
2018-05-20 15:27 866public class Student { priv ... -
mapreduce中入门中要注意的几点
2018-05-06 08:59 675在 mapreduce中,比如有如下的词: I love b ... -
HDFS的基本操作
2018-05-02 21:47 942-mkdir 在HDFS创建目录 ... -
一个不错的开源工具类,专门用来解析日志头部的,好用
2018-05-02 20:00 774一个不错的开源工具类,专门用来解析日志头部的,好用。 http ... -
介绍个不错的RESTFUL MOCK的工具wiremock
2018-04-27 21:02 1909介绍个不错的RESTFUL MOCK的工具wiremock,地 ...
相关推荐
### RESTful API设计规范详解 #### 一、RESTful简介 RESTful是一种广泛应用于Web服务的设计风格,全称为Representational State Transfer(表述性状态转移)。它并非一项具体的技术标准,而是一系列设计原则和约束...
OPCDA转restfulAPI,opcDA与mes或其它第三方通讯服务 x86
Python Flask高级编程之RESTFul API前后端分离精讲第六章节Python Flask高级编程之RESTFul API前后端分离精讲第六章节Python Flask高级编程之RESTFul API前后端分离精讲第六章节Python Flask高级编程之RESTFul API...
restful api访问k8s集群,增删改查信息。 需要预先创建访问权限的配置。 官网api文档 https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.9/ 下面罗列部分api curl -u admin:admin ...
RESTful API 设计最佳实践是构建可扩展、高效且易于使用的Web服务的关键。遵循REST(Representational State Transfer)原则,可以确保API与Web的核心概念——HTTP协议紧密结合,从而实现资源的透明操作。以下是对...
描述:本实验使用SpringBoot、Mybatis和CXF框架来实现Restful API和WebService API接口的大实验,涵盖了数据库设计、 Maven依赖管理、Restful API和WebService API的实现等方面。 标签:spring boot、mybatis、...
### RESTful API 接口说明 #### 一、RESTful API 概述 RESTful(Representational ...合理的URI设计、清晰的HTTP动词使用以及正确的状态码返回,不仅能够提高系统的可读性和可维护性,还能让API更加易于理解和使用。
本项目提供了一个RestfulApi服务端的示例,帮助开发者了解如何构建这样的服务。 在RestfulApi服务端的实现中,通常会用到以下技术栈: 1. **服务器框架**:如Spring Boot或Express.js,它们为快速构建RESTful API...
thinkphp6 RESTful API开发 开发过程记录笔记 https://blog.csdn.net/weixin_41120504/article/details/115638094
以上就是关于RESTful API的基本知识点,结合提供的"RestFul API.pptx"和"TEST.zip"文件,你可以深入学习具体的案例,了解如何设计和实现一个RESTful API。实践中,我们通常会用到如Spring Boot这样的框架来快速构建...
### RESTful API 设计最佳实践 #### 一、引言 随着互联网技术的发展,Web 应用变得越来越复杂,为了支持这些应用的功能扩展和服务交互,API 的设计变得尤为重要。RESTful API 是一种基于 HTTP 协议的应用程序编程...
Python Flask高级编程之RESTFul API前后端分离精讲Python Flask高级编程之RESTFul API前后端分离精讲Python Flask高级编程之RESTFul API前后端分离精讲Python Flask高级编程之RESTFul API前后端分离精讲Python Flask...
标题中的“Python-带RESTful API的自托管文档转换服务”指的是使用Python编程语言构建的一种服务,该服务提供了RESTful应用程序接口(API)用于处理文档转换。RESTful API是一种架构风格,广泛应用于分布式系统,...
RESTfulAPI设计:RESTfulAPI设计基础.docx
接下来,让我们详细探讨Python语言开发RESTful API的核心知识点。 首先,RESTful API的开发和使用本质上涉及客户端与服务器之间的请求(Request)和响应(Response)交互。按照REST架构风格的统一接口原则,不同的...
同时,良好的错误处理机制能帮助识别并修复问题。 在`XEngine_HttpServer`这个文件中,很可能是实现上述功能的一个HTTP服务器框架。通过阅读和理解这个代码,你可以学习到如何在C/C++中实际操作上述步骤。`说明.txt...
基于 RESTful 架构的 API 设计原则和规范 RESTful 架构是目前最流行的一种互联网软件架构,它结构清晰、符合标准、易于理解、扩展方便,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。因此...
例如,如果使用Python,你可以使用`flask`这样的微框架来简化这一过程。 **五、安全与性能优化** 在部署lighttpd RESTful API和CGI服务时,还需考虑以下几点: 1. **权限控制**:确保API接口有适当的访问限制,如...