我想实现一个REST API,并且需要在GET请求上有一个主体。(如这里所讨论的:HTTP GET with request body)有没有http客户端不能用get请求发送正文?fiddler可以做到,尽管消息框是红色的。
7kqas0il1#
一般来说,REST中GET的思想是在URL中发送您的任何参数。正如您所包含问题的答案所表明的,这是可行的,但忽略了REST的要点,即具有一致的webbish接口。如果您想将复杂数据传递到端点,您可能需要使用POST。你的用户会期望有一个身体。我强烈建议重新考虑实现。但是对于你真正的问题,肯定有客户端不能在GET上发送主体。我想你的客户端大多是编程的,比如说python的urlib2,虽然你可以在GET上设置主体,但这并不是模块真正的预期用途,所以你迫使程序员变得奇怪。更重要的是,REST API的思想是客户端不可知的,这就是为什么我觉得你的API设计应该在这里重新设计。
ttp71kqs2#
在GET HTTP请求中使用body是一个坏主意。是的,看起来“法律上”HTTP GET可以有body,但“事实上”你会遇到问题:1.使用客户端框架/库。很难找到对它的支持。1.服务器可以直接忽略GET请求的主体。而且这不是标准的方式,可能是服务器或者它的配置有问题。1.它使你的代码,特别是在服务器端,对其他人来说不清楚,因为没有人会期望GET带有body。你在寻找困难的方法吗?使用带主体的GET会有很多陷阱。为什么不使用其他HTTP动词呢?例如,使用POST(或其他一些动词),而不是:1.准备好客户端库很容易,1.服务器或服务器配置没有问题,1.其他人很清楚不要寻找更难的方法:)
gdx19jrr3#
如果除了发送带正文的GET请求之外没有其他方法,请变通:
httpRequest.Method = "POST"; httpRequest.WriteBytes(bytes); httpRequest.Method = "GET";
3条答案
按热度按时间7kqas0il1#
一般来说,REST中GET的思想是在URL中发送您的任何参数。正如您所包含问题的答案所表明的,这是可行的,但忽略了REST的要点,即具有一致的webbish接口。如果您想将复杂数据传递到端点,您可能需要使用POST。你的用户会期望有一个身体。我强烈建议重新考虑实现。
但是对于你真正的问题,肯定有客户端不能在GET上发送主体。我想你的客户端大多是编程的,比如说python的urlib2,虽然你可以在GET上设置主体,但这并不是模块真正的预期用途,所以你迫使程序员变得奇怪。更重要的是,REST API的思想是客户端不可知的,这就是为什么我觉得你的API设计应该在这里重新设计。
ttp71kqs2#
在GET HTTP请求中使用body是一个坏主意。是的,看起来“法律上”HTTP GET可以有body,但“事实上”你会遇到问题:
1.使用客户端框架/库。很难找到对它的支持。
1.服务器可以直接忽略GET请求的主体。而且这不是标准的方式,可能是服务器或者它的配置有问题。
1.它使你的代码,特别是在服务器端,对其他人来说不清楚,因为没有人会期望GET带有body。
你在寻找困难的方法吗?使用带主体的GET会有很多陷阱。为什么不使用其他HTTP动词呢?
例如,使用POST(或其他一些动词),而不是:
1.准备好客户端库很容易,
1.服务器或服务器配置没有问题,
1.其他人很清楚
不要寻找更难的方法:)
gdx19jrr3#
如果除了发送带正文的GET请求之外没有其他方法,请变通: