Api 设计RESTful URI

Api 设计RESTful URI,api,http,rest,get,Api,Http,Rest,Get,我正在创建一个RESTful API。我读 但是这个网站没有给我足够的设计API的“好”实践。 具体地说,我将编写一个API(仅获取到目前为止的方法),它将提供转换地理坐标的函数 例如: geohash是坐标的单值表示,因此 /convert/geohash/u09tvkx0.json?outputformat=latlong 有道理。另一方面 /convert/latlong.xml?lat=65&long=13&outputformat=UTC需要两个输入值 看到我的“问题”了吗?一个好的

我正在创建一个RESTful API。我读

但是这个网站没有给我足够的设计API的“好”实践。 具体地说,我将编写一个API(仅获取到目前为止的方法),它将提供转换地理坐标的函数

例如: geohash是坐标的单值表示,因此 /convert/geohash/u09tvkx0.json?outputformat=latlong

有道理。另一方面 /convert/latlong.xml?lat=65&long=13&outputformat=UTC需要两个输入值

看到我的“问题”了吗?一个好的API需要多个输入参数,是什么造就了它


(试图通过“分析”twitter&FF来“识别”良好实践,但失败)

就被认为是“技术上”正确的RESTURI而言,使用查询字符串参数与否没有区别。在这方面,它指出:

查询组件包含非层次数据,这些数据与路径组件(第3.3节)中的数据一起用于标识资源

这就是为什么你很难找到一个明确的“最佳实践”。话虽如此,许多RESTAPI确实在URI中嵌入了多个参数,而不使用查询字符串。例如,要识别汽车的品牌和型号,您将看到URI如下的网站:cars.com/honda/civic。在这种情况下,2和URI之间的关系非常明显,因此URI中的所有内容都是“可黑客”的。当您只有一个唯一标识资源的参数时,使用非查询字符串方法也更容易;但如果它类似于搜索查询,那么我可能会将其保留在查询字符串中。这也是关于不同方法的有趣讨论


在上面的示例中,我将坚持使用查询字符串参数。尽管REST通常有更直观的URL,但这并不是REST的真正含义。REST更多地是关于超媒体和应用程序的。

在设计REST API时,很少有REST最佳实践可以遵循

  • 抽象与具体
  • 积垢作业
  • 错误处理
  • API版本控制
  • 过滤
  • 保安
  • 分析
  • 文件
  • 稳定性和一致性
  • URL结构

  • 谢谢您的解释!它用REST“设计原则”填补了我在概念上的空白。我不知道HATEOAS,但我喜欢这种态度。