2012-07-01 76 views
12

यह तय करना मुश्किल है
वर्तमान में मैं के रूप मेंबनाम json HTTP POST एक्स www फार्म-urlencoded

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

या

साथ php lib कर्ल के साथ एक्स-www फार्म-urlencoded डेटा भेज रहा
curl_setopt($curl, CURLOPT_POSTFIELDS, $this->arguments); 

पहला प्रश्न: दूसरा एक बड़ा सामग्री लंबाई लगता है, पहला समाधान शायद बेहतर है?

ऐसा लगता है कि फ्लैट संदेशों के लिए व्यावहारिक है:

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

लेकिन मैं यह भी एक डेटा क्षेत्र है कि एक वस्तु का प्रतिनिधित्व करते हैं, इस मामले में मैं इसे enconding किया गया था, लेकिन यह है कि (JSON एन्कोडिंग यूआरएल) कर रही हो सकता है बहुत है वर्बोज़ और बदसूरत संदेश,

दूसरी तरफ मैं आवेदन/json सामग्री प्रकार के रूप में यह भेजने की कोशिश की पर

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

सामग्री-लंबाई छोटे संदेशों लेकिन w के लिए बड़ा है ith एम्बेडेड json, यह स्पष्ट रूप से बेहतर है

लेकिन एक्स-www फार्म-urlencoded भी रूपों डेटा मैं भेजने के लिए, को छोड़कर जब एक json

एम्बेडेड है यह 2 विभिन्न करने के लिए सुरुचिपूर्ण नहीं होगा की जरूरत के करीब है सामग्री प्रकारों के आधार पर सर्वलेट पार्स विधियां, तो क्या कोई दूसरा विकल्प है?

+1

लघु: एक्स-www-form-urlencoded। लंबा: यह वास्तव में निर्भर करता है कि आप किस प्रकार का डेटा भेजते हैं (जटिल नेस्टेड ऑब्जेक्ट्स या उदाहरण में कुछ फ़ील्ड)। साथ ही यह निर्भर करता है कि आप भेजे गए डेटा के साथ क्या करने जा रहे हैं, क्या इसे तत्काल पार्स किया जाएगा और संसाधित किया जाएगा या इसे संग्रहीत किया जाएगा और फिर उपयोगकर्ता को भेज दिया जाएगा (जेसन एन्कोडेड प्रारूप में)? – pinepain

+0

@pinepain डेटा को ग्लासफ़िश सर्वर पर भेजा जाता है, इसे कैसंड्रा डेटाबेस में पार्स किया जाता है और डाला जाता है, इसे इस '{' डेटा ': json_encode ({' text ':' 2klines .. ',' लेखक 'की तरह घोंसला किया जा सकता है। : 'मुझे'}), 'आईडी': '14141', 'कीवर्ड': json_encode ({[{टैग ': [' नीला ',' लाल ']}, {' लेखक ': [' me ']} }), ..} ' –

+0

चीजों को करने के लिए एक ही तरीके का उपयोग करना बहुत सरल बनाता है। JSON का उपयोग क्यों न करें? PHP की वजह से जो फॉर्म डेटा को $ _POST/$ _ GET/$ _ के रूप में अनुरोध करता है, रिकॉर्डेबल चर और JSON डेटा उबाऊ file_get_contents ('php: // input') के साथ। मुझे नापसंद है कि दुनिया PHP के चारों ओर फैलती है। नोड.जेएस में यह फॉर्म डेटा के बजाय JSON का उपयोग करने के लिए बहुत ही सरल और प्राकृतिक है। –

उत्तर

6

एक्स-www-form-urlencoded और JSON अलग-अलग चीजें हैं। जबकि x-www-form-urlencoded केवल डिफ़ॉल्ट सामग्री प्रकार है जो सर्वर को फ़ॉर्म जमा करने के लिए उपयोग किया जाता है, JSON टेक्स्ट-आधारित और मानव-पठनीय प्रारूप (मानक) है जो नेटवर्क कनेक्शन पर संरचित डेटा को क्रमबद्ध करने और भेजने के लिए उपयोग किया जाता है। आपको उनकी तुलना नहीं करनी चाहिए।

दूसरा एक बड़ी सामग्री लंबाई लगता है, पहला समाधान शायद बेहतर है?

नहीं, "बेहतर" के रूप में लेबल किए गए कोई समाधान नहीं है। पाइनपेन की तरह, यह वास्तव में निर्भर करता है कि आप किस प्रकार का डेटा भेजते हैं और इसे कैसे पार्स/संसाधित करते हैं। JSON अनुरोध के साथ अतिरिक्त डेटा भेजने के लिए पूरी तरह से फिट बैठता है।

सामग्री-लंबाई के बारे में मत सोचें। डेटा और डेटा संरचना के बारे में सोचें जिसे आप भेजना और संसाधित करना चाहते हैं। यदि आप केवल अनुरोध और डेटा-आकार के बीच संरचित डेटा भेजना और संसाधित करना चाहते हैं, तो बस JSON का उपयोग करें। यह इसके लिए बनाया गया है।

दो तरीकों के बीच सामग्री-लंबाई अंतर समस्या का हिस्सा नहीं होगा क्योंकि आपका ऐप एक फेसबुक, ट्विटर या Google राक्षस की तरह नहीं है। समयपूर्व अनुकूलन सभी बुराई की जड़ है।

+7

मैं यहां पढ़ रहा हूं: "समयपूर्व अनुकूलन सभी बुराइयों की जड़ है। JSON के साथ जाएं।" यह सहायक नहीं है। ओपी स्पष्ट रूप से दो समाधानों के बीच मतभेदों के बारे में पूछ रहा है। इसके अलावा, कौन जानता है कि यह समयपूर्व है या नहीं? ओपी प्रोजेक्ट के अंत में हो सकता है जो ऑप्टिमाइज़ेशन विकल्पों को आसानी से समझने की तलाश में है। – Jozua

8

Here आप प्रारूपों के बारे में समान चर्चा पढ़ सकते हैं।

एन्कोडेड डेटा की संरचना नाम-मान जोड़ों का एक फ्लैट सूची होने की गारंटी है, तो एक्स-www फार्म-urlencoded पर्याप्त लगता है। यदि संरचना जटिल (मनमाने ढंग से) जटिल हो सकती है (उदा। घोंसला सूची या सहयोगी सरणी), तो निश्चित रूप से JSON का उपयोग करें।

मेरे लिए, मैं केआईएसएस कुशल हूं। आपकी स्थिति में जेएसओएन/एक्सएमएल/जो भी समय, मेमोरी और सीपीयू चक्र में अतिरिक्त लागत है। एक्स-www-form-urlencoded डेटा पठनीयता और कॉम्पैक्टनेस को गठबंधन करता है ताकि मैं शर्त लगा सकूं कि यह आपकी पसंद है।

संबंधित मुद्दे