2012-07-01 54 views
12

Thật khó để quyết định,
hiện nay tôi đang gửi dữ liệu như x-www-form-urlencoded với php lib curl vớix-www-form-urlencoded Vs json HTTP POST

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

hoặc

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

câu hỏi đầu tiên: thứ hai có vẻ là nội dung dài hơn, giải pháp đầu tiên có lẽ tốt hơn?

Đó là thực tế cho các tin nhắn bằng phẳng như:

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

Nhưng tôi có thể có cũng là một lĩnh vực dữ liệu mà đại diện cho một đối tượng, trong trường hợp này tôi đã enconding nó, nhưng làm điều đó (url mã hóa một Json) là terribly các thông điệp dài dòng và xấu xí,

Ở phía bên kia tôi đã cố gắng gửi nó như là application/json content-type

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

nội dung có độ dài lớn hơn cho các tin nhắn nhỏ nhưng w thứ i nhúng json, nó rõ ràng là tốt hơn

Nhưng x-www-form-urlencoded cũng gần với các dữ liệu hình thức tôi cần phải gửi, trừ khi một json được nhúng

Nó sẽ không được thanh lịch có 2 differents phương pháp phân tích cú pháp servlet tùy thuộc vào loại nội dung, vì vậy có tùy chọn khác không?

+1

RÚT GỌN: x-www-form-urlencoded. LONG: nó thực sự phụ thuộc vào loại dữ liệu nào bạn gửi (đối tượng lồng nhau phức tạp hoặc chỉ một vài trường như trong ví dụ). Ngoài ra nó phụ thuộc vào những gì bạn sẽ làm gì với dữ liệu gửi đi, nó sẽ được phân tích và xử lý ngay lập tức hoặc nó sẽ được lưu trữ và sau đó gửi cho người dùng như là (trong định dạng mã hóa json)? – pinepain

+0

@pinepain dữ liệu được gửi đến một máy chủ thủy tinh, được phân tích cú pháp và chèn vào trong cơ sở dữ liệu Cassandra, nó có thể được lồng nhau như thế này {{'data': json_encode ({'text': '2klines ..', 'author' : 'me'}), 'id': '14141', 'từ khóa': json_encode ({[{'thẻ': ['xanh', 'đỏ']}, {'tác giả': ['tôi']} }), ..} ' –

+0

Sử dụng cùng một cách để làm mọi thứ đơn giản hóa rất nhiều. Tại sao không sử dụng JSON ở mọi nơi? Bởi vì PHP xử lý dữ liệu biểu mẫu dưới dạng $ _POST/$ _ GET/$ _ REQUEST biến và dữ liệu JSON với file_get_contents nhàm chán ('php: // input'). Tôi không thích rằng thế giới quay xung quanh PHP. Trong Node.js, nó khá đơn giản và tự nhiên khi sử dụng JSON thay vì dữ liệu biểu mẫu. –

Trả lời

6

x-www-form-urlencoded và JSON là những thứ khác nhau. Trong khi x-www-form-urlencoded chỉ đơn giản là loại nội dung mặc định được sử dụng để gửi biểu mẫu tới máy chủ, JSON là định dạng dựa trên văn bản và có thể đọc được (chuẩn) được sử dụng để tuần tự hóa và gửi dữ liệu có cấu trúc qua kết nối mạng. Bạn không nên so sánh chúng.

giây thứ hai có vẻ có chiều dài nội dung lớn hơn, giải pháp đầu tiên là có thể tốt hơn?

Không, không có giải pháp nào được gắn nhãn là "tốt hơn". Giống như thông báo của người ta nói, nó thực sự phụ thuộc vào loại dữ liệu nào bạn gửi và cách phân tích/xử lý nó. JSON hoàn toàn phù hợp để gửi dữ liệu bổ sung theo yêu cầu.

Đừng nghĩ về độ dài nội dung. Hãy suy nghĩ về dữ liệu và cấu trúc dữ liệu mà bạn muốn gửi và xử lý nó. Nếu bạn chỉ muốn gửi và xử lý dữ liệu có cấu trúc giữa các yêu cầu và kích thước dữ liệu khác nhau, chỉ cần sử dụng JSON. Nó được xây dựng cho việc này.

Sự khác biệt về độ dài nội dung giữa hai phương pháp sẽ không phải là vấn đề vì ứng dụng của bạn không phải là Facebook, Twitter hoặc Google giống như con quái vật. Tối ưu hóa sớm là gốc rễ của mọi điều ác.

+7

Tất cả những gì tôi đọc ở đây là: "Tối ưu hóa sớm là gốc rễ của mọi điều ác. Đi với JSON." Điều này không hữu ích. OP rõ ràng đang hỏi về sự khác biệt giữa hai giải pháp. Bên cạnh đó, ai biết nếu điều này là quá sớm? OP có thể đã được vào cuối của dự án tìm kiếm dễ dàng để nhận ra các tùy chọn tối ưu hóa. – Jozua

8

Here bạn có thể đọc thảo luận tương tự về định dạng.

Nếu cấu trúc dữ liệu được mã hóa được đảm bảo là danh sách phẳng cặp tên-giá trị, x-www-form-urlencoded có vẻ đủ. Nếu cấu trúc có thể (tùy ý) phức tạp (ví dụ: danh sách lồng hoặc mảng kết hợp), thì chắc chắn sử dụng JSON.

Đối với tôi, tôi là KISS chuyên nghiệp. Trong tình huống của bạn JSON/XML/bất cứ điều gì là chi phí thêm trong thời gian, bộ nhớ và chu kỳ CPU. Dữ liệu x-www-form-urlencoded kết hợp khả năng đọc và gọn nhẹ để tôi có thể đặt cược đó là lựa chọn của bạn.