2017-05-09 49 views
0

我想阐明一个用例,我努力使用GET方法进行读取操作。Rest API GET方法限制

我被要求构建一个API来从预定义模板生成消息。在请求我收到模板ID和需要替代的动态内容。动态内容因模板ID而异。

我已经设计等

  1. 方法= POST在JSON的形式
  2. 响应=纯文本
  3. URL模式=/messagegenerator/V1/templateID
  4. 身体=动态内容消息

我遇到的问题:当我使用GET方法时,模板内容应该在具有长度限制的URL中传递。我们希望准备具有更多动态内容的电子邮件消息。

最终这个服务不会创建任何资源,但我仍然不得不使用POST方法。

我错过了什么?

休息标准不见了?

是否有这样做的没有更好的办法?

获取URL参数的长度是否有限制?

回答

0

您需要创建一个支持http get方法的新API,因为一个API无法接收超过http方法。

+0

这并没有真正回答这个问题,而是关于使用GET的可能性。 –

1

虽然在标准中没有URL限制,有这个关于保持你的URL下字符老建议:What is the maximum length of a URL in different browsers?

的一点是:在你的情况下发送POST请求所有数据在机构是最好的解决方案。把电子邮件正文片段或任何巨大的(如果我理解正确的话)放入一个url是非常难看的:)。即使请求没有在技术上改变服务器上的任何内容,也应该使用POST,是的。

0

正如您所指出的,在REST中,POST方法被认为是创建新资源。在你的情况下,即使你不保存在服务器上,也会通过发布内容来生成新的资源“消息”。

但是您在模板上使用POST!这应该创建一个新的模板。要解决此问题,请将一个子资源添加到模板资源,以便表示它是创建的消息。

我甚至会在“v1”后面添加一个“模板”来扩展URL,以便更明确地表明它是第一级的“模板”资源。

的唯一必要对这种变化将改变这样的网址:

URL pattern = /messagegenerator/v1/template/<templateID>/message 

所以你可以有(即使你现在不执行的话):

GET on /messagegenerator/v1/template/ -> Deliver a list of templates 
POST on /messagegenerator/v1/template/ -> Create a new template 
DELETE on /messagegenerator/v1/template/<templateID> -> Remove a template 
PUT on /messagegenerator/v1/template/<templateID> -> Modify a template 

GET on /messagegenerator/v1/template/<templateID>/message -> Deliver a list of messages 
POST on /messagegenerator/v1/template/<templateID>/message -> Create a new message 
DELETE on /messagegenerator/v1/template/<templateID>/message/<messageID> -> Remove a message 
PUT on /messagegenerator/v1/template/<templateID>/message/<messageID> -> Modify a message 

所以你如果您保存并为其分配ID,则甚至可以管理并返回旧邮件!