2012-07-01 24 views
12

Es difícil decidir,
Actualmente estoy enviando datos mientras que el x-www-form-urlencoded con curl php lib conx-forma-www-urlencoded Vs JSON POST HTTP

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

o

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

primera pregunta: segunda parece ser una mayor longitud del contenido, la primera solución es probablemente mejor?

Es práctico para los mensajes planas como:

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

Pero también puedo tener un campo de datos que representan un objeto, en este caso yo estaba Enconding, pero haciendo eso (url que codifica una JSON) es terriblemente mensajes detallados y feo,

en el otro lado he intentado enviándolo como application/json de tipo de contenido

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

el contenido de longitud es mayor para mensajes pequeños pero w ITH JSON incorporado, que es claramente mejor

Pero x-www-form-urlencoded también está cerca de los datos de formas tengo que enviar, excepto cuando un JSON está incrustado

No sería elegante de tener 2 differents los métodos de análisis de servlet dependen de los tipos de contenido, ¿hay otra opción?

+1

CORTO: x-www-form-urlencoded. LARGO: realmente depende de qué tipo de datos envíes (objetos anidados complicados o solo algunos campos como en el ejemplo). También depende de qué vas a hacer con los datos enviados, ¿se analizará y procesará inmediatamente o se almacenará y luego se enviará al usuario tal como está (en formato json codificado)? – pinepain

+0

@pinepain los datos se envían a un servidor de glassfish, se analizan e insertan en una base de datos de Cassandra, puede anidarse bastante así '' 'data': json_encode ({'text': '2klines ..', 'author' : 'me'}), 'id': '14141', 'palabras clave': json_encode ({[{'tag': ['blue', 'red']}, {'author': ['me']} }), ..} ' –

+0

Usar la misma manera de hacer las cosas simplifica mucho. ¿Por qué no usar JSON en todas partes? Debido a PHP que trata datos de formulario como variables $ _POST/$ _ GET/$ _ REQUEST y datos JSON con aburrido file_get_contents ('php: // input'). No me gusta que el mundo gire alrededor de PHP. En Node.js es bastante simple y natural usar JSON en lugar de datos de formulario. –

Respuesta

6

x-www-form-urlencoded y JSON son cosas diferentes. Mientras que x-www-form-urlencoded es simplemente el tipo de contenido predeterminado que solía enviar el formulario al servidor, JSON es un formato legible y legible para humanos (estándar) que se utiliza para serializar y enviar datos estructurados a través de una conexión de red. No deberías compararlos.

segunda parece ser mayor longitud del contenido, la primera solución es probablemente mejor?

No, no hay una solución etiquetada como "mejor". Como dijo pinepain, realmente depende de qué tipo de datos envíes y cómo analizarlos/procesarlos. JSON se adapta perfectamente para enviar datos adicionales con solicitud.

No piense en la longitud del contenido. Piense en la estructura de datos y datos que desea enviar y procesar. Si solo desea enviar y procesar datos estructurados entre las solicitudes y el tamaño de los datos varía, simplemente use JSON. Está construido para esto.

La diferencia de longitud de contenido entre dos métodos no sería una parte del problema ya que su aplicación no es un monstruo como Facebook, Twitter o Google. La optimización prematura es la raíz de todo mal.

+7

Todo lo que estoy leyendo aquí es: "La optimización prematura es la raíz de todo mal. Ve con JSON". Esto no es útil. OP claramente pregunta sobre las diferencias entre las dos soluciones. Además, ¿quién sabe si esto es prematuro? OP podría haber estado al final del proyecto buscando opciones de optimización fáciles de realizar. – Jozua

8

Here puede leer un debate similar sobre los formatos.

Si la estructura de datos codificados se garantiza que sea una lista plana de pares nombre-valor, x-www-form-urlencoded parece suficiente. Si la estructura pudiera ser (arbitrariamente) compleja (por ejemplo, listas de anidamiento o matrices asociativas ), entonces definitivamente use JSON.

En cuanto a mí, soy el experto de KISS. En su situación, JSON/XML/lo que sea implica un costo adicional en tiempo, memoria y ciclos de CPU. Los datos de x-www-form-urlencoded combinan legibilidad y compacidad, así que puedo apostar que es su elección.