这个主题的一个“维度”被忽略了,但它非常重要:有时“最佳实践”必须与我们正在实现或增强REST功能的平台相一致。
实际的例子:
现在许多web应用程序都实现了MVC(模型、视图、控制器)架构。他们假设提供了一个特定的标准路径,当那些web应用程序带有“启用SEO url”选项时更是如此。
这里只提一个相当有名的网络应用程序:OpenCart电子商务商店。
当管理员启用“SEO url”,它期望说url来一个相当标准的MVC格式,如:
http://www.domain.tld/special-offers/list-all?limit=25
在哪里
special-offers是处理URL的MVC控制器(显示special-offers页面)
List-all是控制器要调用的动作或函数名。(*)
Limit =25是一个选项,表示每页将显示25个项目。
(*) list-all是我使用的一个虚构的函数名。实际上,OpenCart和大多数MVC框架都有一个默认的、隐含的(通常在URL中省略)索引函数,当用户想要执行默认操作时,就会调用该索引函数。真实世界的URL是:
http://www.domain.tld/special-offers?limit=25
现在有了一个类似于上面的相当标准的应用程序或框架结构,你经常会得到一个针对它进行优化的web服务器,为它重写URL(真正的“非SEOed URL”应该是:http://www.domain.tld/index.php?route=special-offers/list-all&limit=25)。
因此,作为开发人员,你要面对的是处理现有的基础设施,并适应你的“最佳实践”,除非你是系统管理员,确切地知道如何调整Apache / NGinx重写配置(后者可能很讨厌!)等等。
因此,你的REST API通常会更好地遵循参考web应用程序的标准,无论是一致性还是易用性/速度(从而节省预算)。
回到上面的实际例子,一个一致的REST API应该是类似这样的url:
http://www.domain.tld/api/special-offers-list?from=15&limit=25
或者(非SEO URLs)
http://www.domain.tld/index.php?route=api/special-offers-list?from=15&limit=25
使用“路径形成”参数和“查询形成”参数的混合。