api如何使用_开发者必备——API设计问题

本文主要探讨RPC和RESTFul两种API风格的特点以及在开发中应该如何进行技术选型,截取了部分网上社区,文章关于API设计的想法和观点供读者参考取舍。

1,背景简述

API学名:应用程序接口(Application Programming Interface)

通俗的打个比方,人与人之间通过语言来交流,而程序和程序之间通过API来交流。

目前市场主流的API设计包括RPC,RESTFul,GraphQL等设计思路,关于API风格优劣,好坏众说纷纭,但客观来说:RPC资历最老,并沿用至今,RESTFul后来者居上,火了好大一阵,最新的GraphQL据说会在Githup下一版投入使用。API的选择问题丝毫不亚于跨端框架Flutter和RN的激烈斗争。但笔者坚持认为:软件开发没有银弹,技术终究会被历史裹挟,不断推进,但对于开发者来说,也许没有永恒的银弹,但在当下选择适合自己业务场景的技术却是举足轻重。

本篇文章主要探讨前两种API设计的优缺点以供读者进行技术决策的参考。

2,RPC以动词为核心

2.1 命名风格

RPC 形式的API通常是动宾结构:

getUserInfo,createUser,getUserById

由于接口的个性化需求,添加新功能时,API中可能会引入其他的动词或介词如By,With,create等等,这也是RESTFul征讨RPC的主要原因

  • 一是嫌它丑
  • 二是认为它不够通用(在服务端更新了之后,客户端也需要阅读文档,适应服务端)

2.2 常用实践

  • 面向接口编程
    在参数传递过程中使用接口而不是实现类,使程序更加灵活可扩展
    例如使用Map而不是HashMap,TreeMap,使用List而不是ArrayList,LinkedList
  • 方法重载
    通俗来讲,省去了方法名,使得API调用更加方便

3,RESTFul以名词为核心

“表述性状态转移”

3.1命名风格

/admin/users (查询用户) 
/admin/users (新增用户) 
/admin/users (更新用户) 
/admin/users (删除用户) 

虽然有点不太恰当,但RESTFul的以名词为核心的API风格其实就是把动词使用请求方法代替了,所谓的表述性状态转移实际上就是用请求方法屏蔽掉了API的部分实现。但不可否认的是,这样对于API的可读性的确有显著提高。

 @RequestMapping(value = "/user", method = RequestMethod.GET)
 @RequestMapping(value = "/user", method = RequestMethod.DELETE)

然而,RESTFul并不能很好适应API的复杂性,例如常见的登录注册功能使用RESTFul的风格难以对资源进行抽象。RESTFul对于单资源的增删改查的确可以实现API的升级,但由于其接口粒度过粗,对于多资源的查询操作难以设计出合理的API。

3.2 常用实践

  • 资源名使用复数
    不要混淆名词单数和复数,为了保持简单,只对所有资源使用复数。
  • 避免多级 URL(存在争议)
    获取某个作者的某一类文章
    GET /authors/12/categories/2

    GET /authors/12?categories=2

    ==============================
    查询已发布的文章
    GET /articles/published

    GET /articles?published=true

4,如何对RPC和RESTFul进行技术决策?

  • 可读性
    相对于RPC,RESTFul风格的API具有更强的可读性,更加利于理解
  • 兼容性
    RESTFul相对于RPC接口,粒度更大。
    RESTFul适合应用于开发API的增删改查,而RPC适合更加精细化可定制的业务场景

在实现开发接口API,RESTFul有更好的表现。

在实现业务系统,RPC具有更高的定制化能力。

5,关于API接口设计的一些讨论

2a2c746c8b46218305a8f70734efb41a.png

251ae79d47fec02a0a6269c339529f98.png

6e2de5dee6dc1d8c4b49a6b8089b108c.png

1153a7f94e2fb3f572a4b64a4e8cd228.png

7ff992cc0d16d66ba495d486b972f236.png

fa405585ba4f08bc4c30d6130a43b0c1.png

53d5f73979c9f29c331523892704a53f.png

f9e049b6836b100f1dc9d8e5b4efde01.png

e01e4db40235cdb7b35ac8a08df5bcda.png

d14bbe17fe905c35f10d17047e4ee3c8.png

06fc24524de6d062cd05b73400edd91d.png

cdfecd187960f20358476cff7e4d122c.png

a7bee54c7fd0d1dea333c88118d15a26.png

a275e9f7f2a270e6c447c157693fb817.png

32ddd9ea85cfd45f87dc067dc19580c6.png

35c05a060e12419ecbb5e0e1e3adc02b.png

7c13e74874e8f04bc64b2a3f090e7994.png

fc80726756b9bfe7ace0edd5cacf8048.png

be1d4045170427039fe7f7447d35217c.png

f373c302928ea12989bac79f91c190b8.png

901f9b7524c0be6b77bfc3dd15d036d3.png

c14d1c2d731f975e6c8249b60c61ed05.png

ffbdb279198400d8079252607c0e2221.png

参考文章

浅谈如何设计API

restful与rpc风格

REST与RESTFul API最佳实践

API 设计最佳实践的思考

RESTful API 最佳实践

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值