【问题标题】:Do you have to store resource if you publish it via rest api?如果通过rest api发布资源,是否必须存储资源?
【发布时间】:2021-02-25 19:18:03
【问题描述】:

假设我有一个带有以下端点的 rest api:/foos/{fooId},它返回一些名为 foo 类型的对象。现在假设我在下面的数据库中存储了不同类型的资源,即栏。示例栏有一些 barId,我通过 api (foo) 可用的资源是一个栏的投影加上其他一些东西。这种设计有意义吗?如果我不存储名为 foo 的资源并且没有 fooId 之类的东西(只是 bar 的投影),我的 api 是否仍然安静?

【问题讨论】:

    标签: rest design-patterns


    【解决方案1】:

    如果 API 遵循 REST 的设计原则,它就是 RESTful,特别是如果它是 level 3 API。

    重要的是客户看到的视图。状态如何存储是一个实现细节,它对 HTTP API 是否为 RESTful 没有直接影响。客户端看不到您的数据库。

    您可以设想一个没有底层数据存储的 REST API;例如,它可以为您提供一天中的日期和时间。只要符合 REST 规则,它仍然是 RESTful。

    了解 RESTful 设计的好资源是 RESTful Web Services CookbookREST in Practice

    【讨论】:

    • +1 -- 直接存储资源是有原因的,也有这样做的原因 -- 例如在客户的要求。
    【解决方案2】:

    如果我不存储名为 foo 的资源并且没有 fooId 之类的东西(只是 bar 的投影),我的 api 是否仍然安静?

    REST 或 HTTP 中没有任何东西会限制您的存储实现。

    如果生成资源表示需要七个数据库、两个时钟、一个外部摄像头和一杯热伯爵茶,那很好。 “规则”,例如它们,都是关于消息的含义,而不是你如何产生它们。

    您可以对资源标识符使用任何您想要的拼写约定。人们通常会选择一种对某些人来说更容易的设计(例如,操作员在 HTTP 访问日志中查看 URI)。

    如果您的资源标识符将是 long lived(特别是,如果它比任何特定实现都更有效),那么您可能希望选择与资源语义更接近的拼写而不是拼写与您当前的存储高度一致。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-17
      • 1970-01-01
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 2015-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多