如何以RESTFul方式设计计算API?

如何以RESTFul方式设计计算API?,rest,Rest,我正试图设计一个API来根据输入计算结果 真实业务: API比较两个证券投资组合(源和目标)并返回订单,消费者获得订单,因此他/她可以下这些订单以调整源到目标的投资组合 如果这很难理解,那么这里有一个类似的场景: API比较两个文本,然后返回两个文本的差异 它与经典的CRUD稍有不同,因为输入和输出是不同的资源 我的第一个想法是: POST /api/difference { 'source': { ... }, 'target': { ... } } 但是,它将与经典有效载荷

我正试图设计一个API来根据输入计算结果

真实业务

API比较两个证券投资组合(源和目标)并返回订单,消费者获得订单,因此他/她可以下这些订单以调整源到目标的投资组合

如果这很难理解,那么这里有一个类似的场景:

API比较两个文本,然后返回两个文本的差异

它与经典的CRUD稍有不同,因为输入输出不同的资源

我的第一个想法是:

POST /api/difference
{
    'source': { ... },
    'target': { ... }
}
但是,它将与经典有效载荷相冲突:

POST /api/difference
{
    'lineNumber': ...,
    'isAdded': ...
}
问题:

  • 我应该使用媒体类型来区分输入有效负载吗?在这种情况下,“资源”应该是什么
  • 如果我还想在调用API的同时下订单(或应用文本差异),那么API应该是什么样子

  • 我不确定我是否正确地理解了你的问题,但总的来说,它是正确的 取决于资源是否已在系统中持久化。万一 这两种资源在系统中都已可用,我只需构建一个URI 类似于
    /portfolio/{source\u id}/difference/{target\u id}
    ,它返回diff 结果。如果只有源代码存在,我可能会使用如下内容:

    POST /portfolio/{source_id}/difference
    
    {target}
    
    如果两种资源都不可用,我可能会考虑首先坚持。
    我不确定我是否正确地理解了你的问题,但总的来说,它是正确的 取决于资源是否已在系统中持久化。万一 这两种资源在系统中都已可用,我只需构建一个URI 类似于
    /portfolio/{source\u id}/difference/{target\u id}
    ,它返回diff 结果。如果只有源代码存在,我可能会使用如下内容:

    POST /portfolio/{source_id}/difference
    
    {target}
    
    如果两种资源都不可用,我可能会考虑首先坚持。
    这样的资源,然后进行比较。

    如果我理解正确,已经存在资源
    POST/api/difference
    ,因此您希望更改MIME类型。相反,为什么不使用第一种方法并更改资源名称?比如说,

    POST /api/compare
    {
        'source': { ... },
        'target': { ... }
    }
    

    如果我理解正确,那么已经存在资源
    POST/api/difference
    ,因此您希望更改MIME类型。相反,为什么不使用第一种方法并更改资源名称?比如说,

    POST /api/compare
    {
        'source': { ... },
        'target': { ... }
    }
    

    源组合是用户帐户的当前组合。目标投资组合可能具有不同的总价值,但在比较和生成订单之前将调整为相同的总价值。源投资组合是用户帐户的当前投资组合。目标投资组合可能具有不同的总价值,但在比较和生成订单之前将调整为相同的总价值。