【问题标题】:Should REST based modules/controllers be split by resource or action/functionality基于 REST 的模块/控制器是否应该按资源或操作/功能拆分
【发布时间】:2020-06-19 19:55:20
【问题描述】:

我有一个看起来像这样的用例:

API1:在美国获取属于 John 的所有书籍:GET Request/country/us/person/john/books

API2:获取所有国家/地区属于 john 的所有书籍:GET Request /person/john/books

API3:获取所有国家/地区的所有书籍:GET Request on /country/books

我想使用NestJS(但这与这个问题不太相关)构建一个休息服务器,它使用modules的概念来组织controllers

在这个例子中我应该有一个:

  • module 调用 books 与 1 controller 处理 3 条路线。或者,
  • 2 modulesbooksByCountrybooksByPerson

有没有推荐的方法来考虑这个问题?

【问题讨论】:

    标签: javascript rest model-view-controller nestjs web-development-server


    【解决方案1】:

    这取决于您希望如何在语义上设置 API。
    对我来说,根据您的用例和资源访问,由于您想按人和/或按国家/地区检索图书资源,我会选择这样的:

    第一种思路:

    API1:获取在美国属于 John 的所有书籍:
    /books/person/{personName}/country/{countryName}上获取请求

    API2:获取所有国家/地区属于 john 的所有书籍:
    /books/person/{personName}上获取请求

    API3:获取所有国家/地区的所有书籍:
    /books 上获取请求

    另一种思考方式:

    API1:获取在美国属于 John 的所有书籍:
    /persons/{personName}/books?country={countryName}上获取请求

    API2:获取所有国家/地区属于 john 的所有书籍:
    /persons/{personName}/books?country=all 上获取请求(或/persons/{personName}/books,如果您不想处理all 查询参数值)

    API3:获取所有国家/地区的所有书籍:
    /books上获取请求

    结论:

    这完全取决于 URI 的语义一致性以及您希望处理路径和查询参数的方式。 无论您是想公开您的 API 还是仅供内部使用,请让您公开资源的方式变得简单且连贯,这样您的消费者在阅读文档和使用您的 API 时就不会迷路。

    如果有帮助,请告诉我,欢迎 cmets 和其他 POV 讨论此主题!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-24
      • 1970-01-01
      • 1970-01-01
      • 2014-01-13
      • 1970-01-01
      • 1970-01-01
      • 2013-07-20
      • 1970-01-01
      相关资源
      最近更新 更多