json जेएसओएन प्रतिनिधियों में लिंक संबंध




rest hateoas (3)

मैं JSON प्रस्तुतियों के आधार पर एक विश्वसनीय API तैयार कर रहा हूं। HATEOAS का अनुपालन करने के लिए, मैं संसाधनों के बीच बड़े पैमाने पर लिंक का उपयोग करता हूं। इसलिए, मैंने एटीओएम लिंक के समान लिंक को क्रमबद्ध करने के लिए इस सुझाव का पालन ​​किया।

अब मुझे कभी-कभी सही लिंक संबंध प्रकार की पहचान करने में समस्याएं होती हैं। जब संसाधन में स्वयं का एक लिंक होता है, तो self संबंध स्पष्ट होता है। जब संसाधन उप-संसाधनों के संग्रह और एकत्रण होते हैं, या संबंधित संसाधनों के कई लिंक होते हैं तो यह अधिक जटिल हो जाता है।

एक ब्लॉग पोस्ट को एक उदाहरण के रूप में लें, और ऐसे संसाधन के बारे में सोचें जो ब्लॉग पोस्ट का एक स्नैपशॉट देता है - जिसमें इस ब्लॉग पोस्ट के लेखक, टैग और टिप्पणियां शामिल हैं। जाहिर है, इस संसाधन में कई उप-स्रोत हैं और निश्चित रूप से उन्हें अलग-अलग लिंक भी प्रदान करना चाहिए:

नमूना संसाधन:

{
   "blogpost":{
      "link":{
         "rel":"self",
         "href":"http://blog/post/4711"
      },
      "author":{
         "name":"Bob",
         "link":{
            "rel":"???",
            "href":"http://author/uri"
         }
      },
      "title":"foobar",
      "content":"A long article here…",
      "comments":[
         {
            "comment":"great article",
            "link":{
               "rel":"???",
               "href":"http://blog/post/4711/comment/1"
            },
            "author":{
               "name":"John Doe",
               "link":{
                  "rel":"???",
                  "href":"http://author/uri"
               }
            }
         }
      ],
      "tags":[
         {
            "value":"foo",
            "link":{
               "rel":"???",
               "href":"http://blog/post/4711/tag/foo"
            }
         }
      ]
   }
}

तो दिए गए लिंक के लिए उचित संबंध क्या हैं? मुझे पता है कि tag जैसे संबंध प्रकार हैं, लेकिन मेरे सभी संसाधन मौजूदा संबंध प्रकार से मेल नहीं खाते हैं। या लेखक / टैग / टिप्पणी का जिक्र करते समय self का उपयोग करना ठीक है, क्योंकि यह संलग्न JSON (उप-) ऑब्जेक्ट के संदर्भ से संबंधित है? अर्थात् इकाई क्या मायने रखती है?

आरएफसी 5 9 88 कहता है:

लिंक का संदर्भ या तो फ़ीड आईआरआई या एक एंट्री आईडी है, जहां यह दिखाई देता है

JSON के संदर्भ में मैं इसकी व्याख्या कैसे कर सकता हूं? क्या प्रत्येक नई वस्तु {…} एक नया संदर्भ है?

धन्यवाद!


उस प्रश्न का उत्तर देने में थोड़ा देर हो चुकी है लेकिन भविष्य के संदर्भ के लिए, इस तरह मैं इस समस्या को हल करता हूं:

{
   "blogpost":{
      "title":"foobar",
      "content":"A long article here…",
      "link":{
         "rel":"self",
         "href":"http://blog/post/4711"
      },
      "link":{
         "rel": "author",
         "href": "http://author/uri",
         "alt":"Bob"
      },
      "link":{
        "rel": "comment",
        "alt": "great article",
        "href":"http://blog/post/4711/comment/1"
      },
      "link": {
        "rel":"tag",
        "href":"http://blog/post/4711/tag/foo",
        "alt":"foo"
      }
   }
}

जब आप इसके बारे में सोचते हैं, टिप्पणियां, टैग इत्यादि आपके पोस्ट से जुड़े सभी विशिष्ट संसाधन होते हैं ... फिर उन सभी को क्यों न बनाएं जो वे हैं .. लिंक! आप अपनी प्रतिक्रिया के आकार को भी बचाते हैं;)


LSON-LD

आप शायद JSON-LD ( लिंक किए गए डेटा के लिए जावास्क्रिप्ट ऑब्जेक्ट नोटेशन पर एक नज़र डाल सकते हैं। यह Hal से अधिक जटिल दिखता है लेकिन आप इसके साथ और अधिक कर सकते हैं।

जेएसओएन-एलडी को डब्ल्यू 3 सी के अंदर मानकीकृत किया जा रहा है, यहां प्रस्ताव की सिफारिश है

भी

क्षमा करें मेरे पास एक उदाहरण प्रदान करने के लिए समय नहीं है ..


यह एक अच्छा सवाल है। यदि आप Hal लिए उदाहरण देखते हैं तो आप देखेंगे कि रिल्स को उप-संसाधन के संदर्भ में परिभाषित किया गया है।
मुझे किसी भी निश्चित गाइड के बारे में पता नहीं है जब रिले संसाधन से संबंधित है या एक निहित उप संसाधन है।
सूचना का एकमात्र अतिरिक्त टुकड़ा जो मैं आपको इंगित कर सकता हूं वह आरएफसी 5 9 88 में एंकर पैरामीटर है जो आपको एक खंड या पूरी तरह से नए यूआरआई का उपयोग करते हुए संदर्भ आईआरआई को फिर से परिभाषित करने की अनुमति देता है।

आदर्श रूप से, आपके मध्यस्थता को यह बताना चाहिए कि संदर्भ आईआरआई नेस्टेड संसाधनों के लिए अलग है या क्या संदर्भ आईआरआई को स्पष्ट रूप से बदला जाना चाहिए। हैल स्पेक राज्यों के रूप में सादे पुराने एप्लिकेशन / जेसन के बजाय एप्लिकेशन / vnd.hal + json जैसे मीडिया प्रकार का उपयोग करने का यह एक और फायदा होगा:

@rel - यह पहचानने के लिए कि लक्ष्य यूआरआई 'विषय संसाधन' से कैसे संबंधित है। विषय संसाधन निकटतम माता-पिता संसाधन तत्व है।







hateoas