x-www-form-urlencoded Vs json HTTP POST

24,331

Solution 1

Here you can read similar discussion about formats.

If the structure of encoded data is guaranteed to be a flat list of name-value pairs, x-www-form-urlencoded seems sufficient. If the structure could be (arbitrarily) complex (e.g. nesting lists or associative arrays), then definitely use JSON.

As for me, I'm the KISS adept. In your situation JSON/XML/whatever is extra costs in time, memory and CPU cycles. x-www-form-urlencoded data combine readability and compactness so i can bet it's your choice.

Solution 2

x-www-form-urlencoded and JSON are different things. While x-www-form-urlencoded is simply default content type which used to submit the form to the server, JSON is text-based and human-readable format (standard) which used for serializing and sending structured data over a network connection. You should not compare them.

second one seems to be larger content length, first solution is probably better?

No, there is no solution labeled as "better". Like pinepain's said, it really depends what kind of data do you send and how to parse / process it. JSON perfectly fits to send additional data with request.

Don't think about the content-length. Think about the data and data structure which you want to send and process it. If you just want to send and process structured data between requests and data-size varies, simply use JSON. It's built for this.

Content-Length difference between two methods wouldn't part of problem since your app is not a Facebook, Twitter or Google like monster. Premature optimisation is root of all evil.

Share:
24,331
Admin
Author by

Admin

Updated on March 05, 2021

Comments

  • Admin
    Admin about 3 years

    It's hard to decide,
    currently I'm sending data as x-www-form-urlencoded with php lib curl with

    curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($this->arguments));
    

    or

    curl_setopt($curl, CURLOPT_POSTFIELDS, $this->arguments);
    

    first question: second one seems to be larger content length, first solution is probably better?

    It's practical for flat messages like:

    {
        "name": "John",
        "token": "2121232145",
        "code": "7",
        "data": "Hello"
    }
    

    But I can have also a data field that represent a object, in this case I was enconding it, but doing that (url encoding a Json) is terribly verbose and ugly messages,

    On the other side I tried sending it as application/json content-type

    curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($this->arguments));
    

    the content-length is larger for small messages but with embedded json, it's clearly better

    But x-www-form-urlencoded is also close to the forms data I need to send, except when a json is embedded

    It would not be elegant to have 2 differents servlet parse methods depending on the content types, so is there another option?

  • Jozua
    Jozua over 9 years
    All I'm reading here is: "Premature optimisation is root of all evil. Go with JSON." This is not helpful. OP is clearly asking about the differences between the two solutions. Besides, who knows if this is premature? OP might have been at the end of the project looking for easy-to-realize to optimization options.