非 RESTful 的微软 REST API 指南

微软发布了创建“RESTful” API的指南。Roy Fielding将这些与REST没有多大关系的API称为HTTP API。

许多组织都发布了创建面向Web的HTTP API的建议,甚至是白宫都发布了一份标准——“白宫Web API标准”。近日,微软公开了他们的“微软REST API指南2.3”,这是一份全面而成熟的规范。该规范被制定出来,主要是供Azure团队在构建云服务时使用。

下面总结了微软API指南的一些关键点,感兴趣地读者可以阅读完整的规范。

为了便于API的应用,URL应该是人类可读和可构造的,而不必借助客户端库。

应支持以下HTTP谓词:GET、PUT、DELETE、POST、HEAD、PATCH、OPTIONS。不是所有的资源都应该支持所有的谓词。

GET、PUT、DELETE和HEAD应该是幂等的。

自定义头信息不是必须的。

客户端应该不需要在URL中传递个人身份信息参数,因为它们可能会暴露在日志文件中。参数应该通过头信息传递。

数据应该以流行的格式提供。

默认数据编码是JSON。

“基本型数值必须遵循RFC4627标准序列化成JSON。”

使用API的开发人员应该能够使用喜欢的语言和平台。

即使是简单的HTTP工具,如curl,也应该能够访问服务。

API应该支持显式版本。

服务应该保持稳定,如果可能,就不要引入破坏性修改,但如果必要,它们也应该允许这样做,通过增加版本号标识出来。

版本应该使用一种Major.Minor方案。

服务可以通过Web钩子(HTTP回调)实现推送通知。

该指南提供了一个例子,说明了什么样的URL是结构良好的URL:

https://api.contoso.com/v1.0/people/jdoe@contoso.com/inbox

而另外一个例子说明了什么样的URL是应该避免的:

https://api.contoso.com/EWS/OData/Users('jdoe@microsoft.com')/Folders('…[very long identifier]…=')

Roy Fielding是REST及HTTP/1.1的作者,同时也是Apache基金会的联合创始人。在微软发布这份REST API指南之后不久,他就表达了对这份规范的不满:“即使是我最糟糕的REST描述也比[微软/aip指南]提供的总结或参考要好很多。”InfoQ联系了Fielding,更详细地了解他为什么对这份规范不满意。以下是他的完整回复:

我认为,像微软这样的公司决定将部分内部文档和开发指南发布到公共论坛,尤其是像GitHub这样的开源协作空间,是很好的。对于公共对话的这种开放性将极大地改善我们这个行业的工作方式。

对于这份指南,我不满意的是,这份指南明明是总结了如何在微软的生态系统中开发合理的HTTP API,但却冠以REST和RESTful API的标签。REST不等于HTTP,这是显而易见的,粗略地读下任何有关REST的资料就可以知道。这份指南明显不是基于REST的,他们甚至没有设 法参考我的工作(除了已经被RFC7231废除的RFC2616的部分内容)。对于以前深入Web Services世界的人们,这是一个常见的错误:将REST描述成SOAP/RPC接口的某种HTTP版本。

不管那种错误在实际中多么常见,它都不能自称是REST。REST架构风格的大部分属性都源于对其所有约束的坚持,而不只是那些与过去已失败的 工具类似的约束。如果那些想要使用HTTP构建RPC接口的人们,将它们的接口称为HTTP API,那么我没有任何意见。它们不是REST的。它们不属于Web。那并不是说,它们不能被诚实地描述,并实现为HTTP服务。要这样理解它们,讨论它 们的实现指南,而又不觉得需要遵从错误的说法,这是值得的。

许多Web服务提供商都使用了HTTP API,并且运用得非常成功。大部分云计算都是基于这样的API。不知道为什么这么多人坚持把它们的服务称为“RESTful”,而它们并不是。关于这个问题,我们建议那些有兴趣了解更多信息的读者阅读下列InfoQ文章:《为什么有些Web API不是RESTful的?针对这些API我们能做些什么?》、《与Roy Fielding谈论版本化、超媒体以及REST》。

查看英文原文:Microsoft REST API Guidelines Are Not RESTful

文章转载自 开源中国社区[http://www.oschina.net]

时间: 2024-08-04 12:30:52

非 RESTful 的微软 REST API 指南的相关文章

restful-如何设计RESTful的视图层API?

问题描述 如何设计RESTful的视图层API? 很多关于RESTful的文章都详细介绍了设计几个基础API的URL, 例: GET /users GET /users/{name} POST /users/{name} PUT /users/{name} DELETE /users/{name} 这里的两个GET, 我的理解应该是返回json的数据. 对应这套增删改查, 通常会有这样三个页面: user/list.html user/add.html user/edit.html 那么请求这些

微信公众平台自定义菜单接口API指南

微信公众平台开发模式自定义菜单接口API指南  开发实现方法,请查看  微信公众平台开发(58)自定义菜单   简介 开发者获取使用凭证(如何获取凭证)后,可以使用该凭证对公众账号的自定义菜单进行创建.查询和删除等操作. 自定义菜单接口可实现以下类型按钮: click(点击事件): 用户点击click类型按钮后,微信服务器会通过消息接口(event类型)推送点击事件给开发者,并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值进行消息回复. 创建自定义菜单后,由于微信客户端缓存,需

JDK1.4非阻塞套接字API概述

J2SE 1.4版引入了非阻隔套接字(Nonblocking sockets),它允许在网络通信应用程序和没有阻隔的进程中使用套接字.本文将详细介绍什么是非阻隔套接字(Nonblocking sockets)及其工作原理和用途. 从Java 1.4起,程序员便能用一组新的API来进行I/O操作.这是JSR 51项目的结果,自2000年1月的Java 1.4 beta版,程序员便可以使用JSR 51了.在Java 1.4中增加了一些非常重要的新技术来处理诸如在文件和套接字上进行高性能的读/写操作,

java做RESTful Web Service(API)如何解决验证的问题

问题描述 由于restfulwebservice是stateless无状态的,这样如何才能进行使用者的身份验证呢?哪位前辈可以提供一点思路吗?或者说,有现成的框架可以利用的?找到一篇文章:不知道文中的方法,是不是现在业界最常用的办法呢?或者说,是不是业界证明最好最有效的办法? 解决方案 解决方案二:REST服务的安全,一般依赖于HTTP认证,HTTP认证有几种:basic,digest,token,这些都有标准的实现的开源包需要主要的是这个认证的帐号跟你业务的帐户实际是不一样的,REST属于we

微信公众平台通用接口API指南

  下述文档已过期,新版文档请访问 http://www.cnblogs.com/txw1958/p/weixin-access-token.html  微信公众平台目前分成消息接口和通用接口两大模块. 接入消息接口的微信公众账号,当关注该公众账号的粉丝向其发送消息,微信服务器会对公众账号所对应的服务器地址推送一个特定结构的消息体,公众账号开发者可以通过响应包进行对该条消息的回复. 通用接口的作用是实现诸如获取粉丝资料,上传媒体文件以便消息接口回复图片.语音和视频等多媒体消息等功能,丰富消息接口

微服务实战(二):使用API Gateway

本文讲的是微服务实战(二):使用API Gateway,[编者的话]本系列的第一篇介绍了微服务架构模式.它讨论了采用微服务的优点和缺点,除了一些复杂的微服务,这种模式还是复杂应用的理想选择. 当你决定将应用作为一组微服务时,需要决定应用客户端如何与微服务交互.在单体式程序中,通常只有一组冗余的或者负载均衡的服务提供点.在微服务架构中,每一个微服务暴露一组细粒度的服务提供点.在本篇文章中,我们来看它如何影响客户端到服务端通信,同时提出一种API Gateway的方法. 介绍 假定你正在为在线购物应

微软走向“边缘”:Windows和Office?咱们还是聊聊云跟AI吧…

在日前召开的微软Build 2017开发者大会上,微软公司CEO Satya Nadella公布了Windows已经迎来新的发展里程碑--月度活跃用户超过5亿.此外,他亦对Windows与Office进行了少量介绍. 相反,他与微软云企业集团执行副总裁Scott Guthrie以及微软人工智能与研究部门执行副总裁Harry Shum一道,将大部分时间用在了讨论Azure云服务.数据库以及跨平台开发工具身上. 在本届开发者大会的开幕式上,Nadella在主题演讲中表示在这样一个阳光灿烂的日子里,"

微软靠什么重新崛起?

作为十多年的总部老员工,邓力曾经不好意思在同事面前使用其他品牌手机,哪怕Windows Phone并不好用. 但是,2015年9月17日,当萨提亚·纳德拉(Satya Nadella)升任微软CEO后出席的首次公开大会上发表讲话时,他举着一台iPhone,展示了里面安装的Outlook邮件应用.在公开场合放下身段,与对手握手言和,这种态度是微软前所未有的. 尽管没有一次企业文化内部宣讲培训,但从这一天开始,改变潜移默化地发生了.自上而下,微软的每一个部门乃至员工,开始卸去了身上的很多无形枷锁与压

Struts Validator验证器使用指南和使用方法

Struts Validator验证器使用指南 (根据Struts Validator Guide) 作者: David Winterfeldt大卫  James Turner詹姆斯          Rob Leland罗伯特 翻译:   侯思超 验证器: 从0.5版,验证器在一些form中就已经实现了,他最初包含在开发人员包中,后来核心代码挪到Jakarta Commons包中和Struts特别扩展中作为 Struts 1.1的一部分.许多开发者为方便一直使用struts验证器,这篇文档首先