Rest API GET方法限制
我想阐明一个用例,我努力使用GET方法进行读取操作。Rest API GET方法限制
我被要求构建一个API来从预定义模板生成消息。在请求我收到模板ID和需要替代的动态内容。动态内容因模板ID而异。
我已经设计等
- 方法= POST在JSON的形式
- 响应=纯文本
- URL模式=/messagegenerator/V1/templateID
- 身体=动态内容消息
我遇到的问题:当我使用GET方法时,模板内容应该在具有长度限制的URL中传递。我们希望准备具有更多动态内容的电子邮件消息。
最终这个服务不会创建任何资源,但我仍然不得不使用POST方法。
我错过了什么?
休息标准不见了?
是否有这样做的没有更好的办法?
获取URL参数的长度是否有限制?
您需要创建一个支持http get方法的新API,因为一个API无法接收超过http方法。
虽然在标准中没有URL限制,有这个关于保持你的URL下字符老建议:What is the maximum length of a URL in different browsers?
的一点是:在你的情况下发送POST请求所有数据在机构是最好的解决方案。把电子邮件正文片段或任何巨大的(如果我理解正确的话)放入一个url是非常难看的:)。即使请求没有在技术上改变服务器上的任何内容,也应该使用POST,是的。
正如您所指出的,在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,则甚至可以管理并返回旧邮件!
这并没有真正回答这个问题,而是关于使用GET的可能性。 –