For Restful API, can GET method use json data?

This question already has an answer here:

  • HTTP GET with request body 18 answers

  • In theory, there's nothing preventing you from sending a request body in a GET request. The HTTP protocol allows it, but have no defined semantics, so it's up to you to document what exactly is going to happen when a client sends a GET payload. For instance, you have to define if parameters in a JSON body are equivalent to querystring parameters or something else entirely.

    However, since there are no clearly defined semantics, you have no guarantee that implementations between your application and the client will respect it. A server or proxy might reject the whole request, or ignore the body, or anything else. The REST way to deal with broken implementations is to circumvent it in a way that's decoupled from your application, so I'd say you have two options that can be considered best practices.

    The simple option is to use POST instead of GET as recommended by other answers. Since POST is not standardized by HTTP, you'll have to document how exactly that's supposed to work. This is the least RESTful option, but it's fine.

    The RESTful option, which I prefer, is to implement your application assuming the GET payload is never tampered with. Then, in case something has a broken implementation, you allow clients to override the HTTP method with the X-HTTP-Method-Override , which is a popular convention for clients to emulate HTTP methods with POST . So, if a client has a broken implementation, it can write the GET request as a POST , sending the X-HTTP-Method-Override: GET method, and you can have a middleware that's decoupled from your application implementation and rewrites the method accordingly. This is the best option if you're a purist.


    To answer your question, yes you may pass JSON in the URI as part of a GET request (provided you URL-encode). However, considering your reason for doing this is due to the length of the URI, using JSON will be self-defeating (introducing more characters than required).

    I suggest you send your parameters in body of a POST request, either in regular CGI style ( param1=val1&param2=val2 ) or JSON (parsed by your API upon receipt)

    链接地址: http://www.djcxy.com/p/71452.html

    上一篇: 带请求正文的http GET

    下一篇: 对于Restful API,GET方法可以使用json数据吗?