我是网络API设计的新手,所以我尝试使用这些文章学习Web API设计的最佳实践:
1。Microsoft REST API Guidelines
2。Web API Design-Crafting Interfaces that Developers Love from "Apigee"
Apigee建议Web API开发人员使用这些建议来获得更好的API。 我在这里引用两条建议: 我需要C#代码在我的Web API(在ASP Core中)实现这些建议,这是本机移动应用程序和AngularJs网站的后端。
- 扫除'?'背后的复杂性 大多数API都具有超出资源基础级别的复杂性。复杂性可以包括许多可以更新,更改,查询的状态,以及与之关联的属性 资源。
醇>通过在HTTP问号后面添加可选的状态和属性,让开发人员可以轻松使用基本URL。让所有红狗在公园里跑:
GET /dogs?color=red&state=running&location=park
- 部分响应允许您为开发人员提供他们所需的信息。
醇>以Twitter API上的推文请求为例。您将获得的不仅仅是典型的Twitter应用程序经常需要的内容 - 包括人名,推文文本,时间戳,重新发布消息的频率以及大量元数据。
让我们看看几个领先的API如何处理开发人员所需的内容 回应,包括谷歌开创了部分回应的想法。
/people:(id,first-name,last-name,industry)
此人的请求会返回ID,名字,姓氏和行业。
LinkedIn使用这种简洁的语法进行部分选择:( ...)语法不言而喻。
此外,开发人员很难使用搜索引擎对其含义进行逆向工程。
实
/joe.smith/friends?fields=id,name,picture
谷歌
谷歌和Facebook有类似的方法,效果很好。
?fields=title,media:group(media:thumbnail)
它们每个都有一个名为fields的可选参数,之后你可以输入要返回的字段名称。
正如您在此示例中所看到的,您还可以将子对象放入响应中,以从其他资源中提取其他信息。
在逗号分隔的列表中添加可选字段
Google方法效果非常好。
以下是如何使用此方法从我们的狗API获取所需信息:
/dogs?fields=name,color,location
现在我需要处理这类查询的C#代码,或者更复杂的代码:
api/books/?publisher=Jat&Writer=tom&location=LA?fields=title,ISBN?$orderBy=location desc,writerlimit=25&offset=50
因此,Web API用户将能够根据他们的需求发送他们想要的任何类型的请求,具有不同的复杂性,字段,排序等。