【问题标题】:RESTful design of convert, calculate转换、计算的 RESTful 设计
【发布时间】:2016-11-29 08:53:13
【问题描述】:

如何设计如下操作:

  • 计算
  • 转换
  • 翻译

例如:从“EUR”转换为“CNY”金额“100”。

这是/convert?from=EUR&to=CNY&amount=100 RESTful 吗?

【问题讨论】:

    标签: rest restful-architecture restful-url


    【解决方案1】:

    什么都没有

    /convert?from=EUR&to=CNY&amount=100
    

    不是 RESTful。您可以说这标识了一个 REST 资源。

    但它看起来类似于 HTTP 上的 RPC(远程过程调用),在不像货币转换那么简单的情况下,会导致系统不是 RESTful。

    总是问自己:我的资源是什么?

    一个答案可能是:资源是转换结果,由两种货币和金额标识。那么如果你使用它会看起来更 RESTful

    /conversion?from=EUR&to=CNY&amount=100
    

    请注意,路径是名词 (conversion),而不是动词 (convert)。一般来说,如果你可以用名词命名一个 REST 资源,那么你就走在了正确的轨道上。

    如果您将识别位放入查询参数 (?from=EUR&to=CNY&amount=100) 或路径中,这是一个个人喜好问题。你可以使用

    /conversion/EUR/100/CNY
    

    使用三个路径参数:

    /conversion/{FROM}/{AMOUNT}/{TO}
    

    【讨论】:

      【解决方案2】:

      转换

      您的 API 在我看来不错:

      /convert?from=EUR&to=CNY&amount=100
      

      Lutz Horn 的answer 也提供了一个不错的选择。

      计算

      如果您的 API 必须处理复杂或冗长的操作,使用 POST 可能是个好主意:

      /calculate
      

      您可以在请求中包含计算。这样可以避免在 URL 中包含冗长的计算。

      如果您的 API 必须处理简单的操作,那么您可以使用这种设计:

      /calculate/add/?param1=value1&param2=value2
      

      同样适用于subtractmultiplydivide 等。

      /calculate/subtract
      /calculate/multiply
      /calculate/divide
      

      翻译

      对于翻译,我喜欢谷歌翻译的 API 设计:

      /translate/{source}/{target}/value
      

      这里,source 是您的源语言(例如 EN),target 是您的目标语言(例如 HI)。

      最终,您的 API 设计取决于您的选择。

      【讨论】:

      • '您可以在请求中包含计算'。那将是 RPC,而不是 REST。在这种情况下,REST 资源是什么?
      猜你喜欢
      • 1970-01-01
      • 2011-07-14
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      • 2018-02-11
      • 2016-06-06
      • 2022-01-25
      • 2014-10-19
      相关资源
      最近更新 更多