【问题标题】:RESTful query API designRESTful 查询 API 设计
【发布时间】:2019-07-16 09:45:16
【问题描述】:

我想问最 RESTful 的查询方式是什么,我有这个现有的 API

/entities/users?skip=0&limit=100&queries={"$find":{"$minus":{"$find":{"username":"markzu"}}}}

查询的第一部分skiplimit 很容易识别,但我发现“查询”部分对其他人来说非常混乱。查询的意思是

查找每个用户 minus 查找用户名为“markzu”的用户实体

以这种方式定义的原因是由于内部数据库查询行为。 这意味着在我们使用的 NoSQL 数据库中,资源运行两个事务查询,首先是查找 User 表中的所有内容,减去具有指定用户名的 find User(类似于 SQL)——布尔操作。 换句话说,查询的意思是,“获取除用户名'markzu'之外的每个用户

根据标准以 RESTful 方式定义它的正确方法是什么?

【问题讨论】:

    标签: rest api architecture


    【解决方案1】:

    根据标准以 RESTful 方式定义它的正确方法是什么?

    REST 不关心您对资源标识符使用什么拼写,只要您的选择与RFC 3986 中定义的生产规则一致。

    不过,我们确实有URI Templates 的标准

    URI 模板是一个紧凑的字符序列,用于通过变量扩展来描述一系列统一资源标识符。

    您已经知道最熟悉的 URI 模板形式——在查询字符串中编码的键值对。

    ?skip=0&limit=100&username=markzu
    

    这通常是一个方便的选择,因为 HTML 了解如何将表单处理为 url 编码的查询。

    看起来您不需要任何其他参数,您只需要能够从其他人那里查询。所以一个完全合理的选择可能是

    /every-user-except?skip=0&limit=100&username=markzu
    

    考虑“准备好的语句”而不是“查询”可能会有所帮助。

    实现的底层细节根本不应该进入计算。您的 REST API 是一种外观,使您的应用看起来像一个支持 HTTP 的键值存储。

    【讨论】:

      猜你喜欢
      • 2014-12-25
      • 2012-12-21
      • 1970-01-01
      • 2018-02-11
      • 1970-01-01
      • 2018-12-19
      • 1970-01-01
      相关资源
      最近更新 更多