REST POST和GET实体格式之间的不一致?

时间:2018-02-13 23:26:49

标签: json rest api-design

我正在创建一个API,用于提交内部处理的传入电子邮件。邮件服务器脚本将以简单的格式提交它们,就像收到的一样:

POST /api/messages/
{
    "sender": "sender@...",
    "recipient": "recipient@...",
    "email_message": "headers\nbody"
}

然而,在提交时,email_message被解析,一些字段被提取,消息体被解析等,我们实际存储的实体是这样的:

GET /api/messages/1/
{
    "sender": "sender@...",
    "recipient": "{our internal recipient ID}"
    "subject": "Subject from email",
    "date": "Date from email",
    "parsed_body": "Output of some magic performed on the Email body",
    ... etc ...
}

正如您所看到的,这与首先通过POST提交的内容完全不同。

是否允许在REST规则下进行此转换,还是应该按原始POST方式存储(和检索)实体?如果它应该按原样存储,那么我应该提供什么样的API端点来提交未解析的消息?

1 个答案:

答案 0 :(得分:1)

  

是否允许在REST规则下进行此转换,或者是否应按原始POST方式存储(和检索)实体?

对于POST,存储任何有意义的东西都没关系。想想它在网络上的运作方式;我们填写一个表单,提交为一堆键值对,但服务器不承诺它将存储键值对。

PUT语义不同;客户端期望新表示覆盖现有表示(如果有的话),无论这意味着什么。因此,您需要更多地了解这些语义的含义,特别是在客户被允许作出各种响应的假设时所做的假设。

POST语义更宽容(因此,客户关于正在发生的事情的信息较少;这是权衡的一部分)。