Sync

अंतिम अपडेट: 22 जून 2026

Sync एक CDA endpoint है जो Space की प्रकाशित सामग्री को इंक्रीमेंटल (डेल्टा) रूप में सिंक करता है। प्रकाशित Content, Media और Content Type को हर बार पूरा दोबारा प्राप्त करने के बजाय, क्लाइंट एक बार पूरी सामग्री प्राप्त करके उसे लोकल में कैश कर लेता है, और उसके बाद से केवल पिछली सिंक के बाद बदली हुई और हटाई गई चीज़ें प्राप्त करके उस कैश को अपडेट करता है। यह उन ऐप्स में ट्रांसफर मात्रा घटाने के लिए इस्तेमाल होता है जिन्हें प्रकाशित सामग्री पूरी अपने पास रखनी होती है (ऑफ़लाइन कैश, सर्च इंडेक्स, स्टैटिक साइट बिल्ड आदि)।

सिंक दो चरणों में चलता है। पहले प्रारंभिक सिंक से पूरी सामग्री प्राप्त करें, और रिस्पॉन्स में आने वाले nextSyncUrl को सहेज लें। उसके बाद से उस URL में मौजूद sync-token से डेल्टा सिंक कॉल करके केवल बदली और हटाई गई चीज़ें प्राप्त करते हैं, और रिस्पॉन्स फिर से एक नया nextSyncUrl देता है, इसलिए उस मान को सहेज कर यह प्रक्रिया दोहराते हैं।

सिंक का प्रवाह

  1. प्रारंभिक सिंक: ?initial=true&type=All से कॉल करके पूरी प्रकाशित सामग्री प्राप्त करें। रिस्पॉन्स के अंत में nextSyncUrl आता है।
  2. nextSyncUrl सहेजें: प्राप्त nextSyncUrl मान को ज्यों का त्यों सहेज लें। इस URL के भीतर अगली कॉल में इस्तेमाल होने वाला sync-token मौजूद होता है।
  3. डेल्टा सिंक: सहेजे हुए nextSyncUrl के sync-token से दोबारा कॉल करें। पिछली सिंक के बाद बदली हुई और हटाई गई चीज़ें ही रिस्पॉन्स में आती हैं, और अंत में एक नया nextSyncUrl साथ आता है।
  4. दोहराएं: प्राप्त नए nextSyncUrl को सहेजें, और जब भी सिंक की ज़रूरत हो, चरण 3 को दोहराएं।

sync-token ऐसा मान नहीं है जिसे आप खुद बनाएं, बल्कि एक अपारदर्शी (opaque) कर्सर है। इसका फ़ॉर्मैट क्या है यह व्याख्या करने या हाथ से जोड़कर बनाने की कोशिश न करें, बल्कि ठीक पिछले रिस्पॉन्स के nextSyncUrl से प्राप्त मान को ज्यों का त्यों अगली कॉल में पास करें।

रिस्पॉन्स की संरचना

नीचे डेमो Space की प्रारंभिक सिंक (type=All) का रिस्पॉन्स है। items में प्रकाशित एंटिटी और डिलीशन मार्कर मिश्रित रूप में आते हैं, और अंत में अगली डेल्टा सिंक के लिए इस्तेमाल होने वाला nextSyncUrl आता है।

{
  "sys": { "type": "PageResponse" },
  "limit": 15,
  "items": [
    {
      "sys": {
        "id": "3trmXRM3RqbgSnifyg7OGhwhlqvAvq",
        "type": "Content",
        "space": { "sys": { "id": "HnQ32YiH", "type": "Refer", "targetType": "Space" } },
        "contentType": { "sys": { "id": "3trmXRLdJF4GBlAjtcuoZ7Pnxj8dlA", "type": "Refer", "targetType": "ContentType" } },
        "createdAt": "2026-06-15T15:16:12.151Z",
        "updatedAt": "2026-06-16T14:31:20.073Z",
        "revision": 3
      },
      "fields": {
        "price": { "ko-KR": 18000 },
        "description": { "ko-KR": "이중 진공 단열로 보온·보냉이 오래갑니다. 500ml 대용량." },
        "photo": {},
        "productName": { "ko-KR": "스테인리스 텀블러 500ml" }
      }
    },
    {
      "sys": {
        "id": "3trmXRM3RqbgSnifyg7O7vFALWs1GJ",
        "type": "DeletedContent",
        "space": { "sys": { "id": "HnQ32YiH", "type": "Refer", "targetType": "Space" } },
        "contentType": { "sys": { "id": "3trmXRLdJF4GBlAjtcuoZ7Pnxj8dlA", "type": "Refer", "targetType": "ContentType" } },
        "createdAt": "2026-06-15T07:34:41.522Z",
        "updatedAt": "2026-06-15T07:41:57.198Z",
        "revision": 1
      }
    }
  ],
  "links": {},
  "nextSyncUrl": "/v1/spaces/HnQ32YiH/sync?sync-token=165rWhDiuLNoYOwjVQQAYXMA7makztXnhAV3qamYU75jFldqtvaEhMnr29PqsKTAbcoy6xs0iKpafM0KsKfZ2OHtA6pmbpx2pgx5jJ6bFzrkrBvoSvXF8tYZPkbw4X7B2EpCr95lgkQv4UJVCu1SSZIeH2ewzF"
}

मुख्य कुंजियां:

  • sys.type: सिंक रिस्पॉन्स को लपेटने वाले लिफ़ाफ़े का प्रकार, जो हमेशा "PageResponse" होता है।
  • limit: एक बार में आए हुए आइटम की संख्या।
  • items: एक ऐरे जिसमें प्रकाशित एंटिटी और डिलीशन मार्कर मिश्रित रूप में आते हैं। ऊपर के उदाहरण का पहला आइटम एक जीवित Content (बॉडी सहित) है, और दूसरा आइटम डिलीशन मार्कर (DeletedContent) है जिसमें बॉडी के बिना केवल sys आता है। आइटम के प्रकारों को नीचे आइटम के प्रकार में बताया गया है।
  • links: पेज लिंक ऑब्जेक्ट। Sync अगले पेज और अगली डेल्टा को nextSyncUrl से जोड़ता है, इसलिए यह ऑब्जेक्ट खाली हो सकता है।
  • nextSyncUrl: अगली डेल्टा सिंक के लिए कॉल किया जाने वाला पथ। इस URL के sync-token को अगली कॉल में ज्यों का त्यों इस्तेमाल करें।

items के fields एक भाषा के लिए चुने हुए नहीं, बल्कि locale मैप के रूप में ज्यों के त्यों होते हैं। जैसे ऊपर के उदाहरण में productName का मान { "ko-KR": "스테인리스 텀블러 500ml" } है, वैसे ही हर field का मान locale-वार मानों वाले मैप के रूप में आता है। CDA Content और CDA Media के क्वेरी, जो locale पैरामीटर से मान को एकल मान के रूप में चुन कर देते हैं, उनसे अलग, Sync एक भाषा के लिए चुने बिना पूरा मैप ज्यों का त्यों भेजता है। क्लाइंट इस मैप को प्राप्त कर लोकल में कैश करता है और ज़रूरत के समय इच्छित भाषा का मान चुनकर इस्तेमाल करता है। इसीलिए Sync में locale पैरामीटर नहीं होता।

ऊपर के उदाहरण में photo का {} (खाली मैप) होना इसलिए है क्योंकि जुड़ा हुआ Media किसी भी locale में नहीं है।

आइटम के प्रकार

items में अलग-अलग sys.type वाले आइटम मिश्रित रूप में आते हैं। मोटे तौर पर इनकी दो शाखाएं हैं: जीवित एंटिटी और डिलीशन मार्कर।

sys.typeबॉडी (fields)अर्थ
Contentहैजीवित प्रकाशित Content. पूरी बॉडी आती है।
Mediaहैजीवित प्रकाशित Media. पूरी बॉडी आती है।
ContentTypeहैजीवित प्रकाशित Content Type. पूरी बॉडी आती है।
DeletedContentनहींहटाए गए Content का मार्कर। बॉडी के बिना केवल sys आता है।
DeletedMediaनहींहटाए गए Media का मार्कर। बॉडी के बिना केवल sys आता है।

डिलीशन मार्कर इस बात का संकेत है कि वह संसाधन अब प्रकाशित सामग्री में नहीं है। क्लाइंट मार्कर के sys.id को देखकर लोकल कैश से उस आइटम को मिटा देता है।

प्रारंभिक सिंक में type पैरामीटर से तय किया जाता है कि क्या प्राप्त करना है।

typeक्या प्राप्त होता है
Allजीवित Content, Media, Content Type और सभी डिलीशन मार्कर
Contentजीवित Content (साथ में Content Type और Media)
Mediaजीवित Media (साथ में Content और Content Type)
Deletionसभी डिलीशन मार्कर (DeletedContent और DeletedMedia)
DeletedContentहटाए गए Content के मार्कर
DeletedMediaहटाए गए Media के मार्कर

जब type का मान Content या DeletedContent हो, तब content-type पैरामीटर से किसी विशिष्ट Content Type के आइटम तक सीमित किया जा सकता है।

API

नीचे दिए गए दोनों endpoints का बेस URL https://cda.weegloo.com/v1 है, और Authorization हेडर में CDA को प्रमाणित करने वाला Bearer टोकन ज़रूरी है। दोनों का पथ एक ही GET /spaces/{spaceId}/sync है, और क्वेरी पैरामीटर से प्रारंभिक सिंक और डेल्टा सिंक में अंतर किया जाता है। Content और Media के क्वेरी से अलग, Sync में locale पैरामीटर नहीं होता। मान locale मैप के रूप में ज्यों का त्यों आता है।

खाली items का अर्थ है कि पिछली सिंक के बाद कोई बदलाव नहीं हुआ है। ऐसे में भी एक नया nextSyncUrl आता है, इसलिए उस मान को सहेज कर अगली सिंक में ज्यों का त्यों इस्तेमाल करें।

  • CDA अवलोकन: संपूर्ण CDA और सामान्य डिलीवरी व्यवहार।
  • CDA Content: एकल क्वेरी से केवल एक भाषा का मान चुनकर प्राप्त किया गया प्रकाशित Content.
  • CDA Locale: सिंक से प्राप्त locale मैप में से मान चुनते समय इस्तेमाल होने वाली Locale सूची।
  • बहुभाषा (अवधारणा): locale मान का चयन और fallback.