هاتيواس

يُعد استخدام الوسائط المتعددة كمحرك لحالة التطبيق ( HATEOAS ) قيدًا من قيود نمط REST المعماري للبرمجيات، وهو ما يميزه عن أنماط الشبكات المعمارية الأخرى . [ 1 ]

باستخدام HATEOAS، يتفاعل العميل مع تطبيق شبكي توفر خوادمه المعلومات ديناميكيًا عبر الوسائط المتعددة . ولا يحتاج عميل REST إلى معرفة مسبقة تُذكر حول كيفية التفاعل مع التطبيق أو الخادم، باستثناء فهم عام للوسائط المتعددة.

وعلى النقيض من ذلك، يتفاعل العملاء والخوادم في بنية وسيط طلب الكائنات المشتركة (CORBA) من خلال واجهة ثابتة مشتركة من خلال الوثائق أو لغة وصف الواجهة (IDL).

تؤدي القيود التي يفرضها نظام HATEOAS إلى فصل العميل عن الخادم، مما يسمح لوظائف الخادم بالتطور بشكل مستقل.

صاغ روي فيلدينغ هذا المصطلح في عام 2000 في أطروحته للدكتوراه. [ 2 ]

مثال

يقوم برنامج المستخدم بإرسال طلب HTTP إلى واجهة برمجة تطبيقات REST عبر عنوان URL لنقطة الدخول . تُكتشف جميع الطلبات اللاحقة التي قد يرسلها برنامج المستخدم ضمن استجابة كل طلب. تُعد أنواع الوسائط المستخدمة لهذه التمثيلات، وعلاقات الروابط التي قد تحتويها، جزءًا من واجهة برمجة التطبيقات. ينتقل العميل بين حالات التطبيق عن طريق الاختيار من الروابط داخل التمثيل أو عن طريق معالجة التمثيل بطرق أخرى يوفرها نوع الوسائط الخاص به. وبهذه الطريقة، يتم توجيه التفاعل عبر RESTful بواسطة الوسائط المتعددة، بدلاً من المعلومات الخارجية. [ 3 ]

على سبيل المثال، يقوم طلب GET هذا بجلب مورد حساب، ويطلب التفاصيل في تمثيل JSON: [ 4 ]

طلب GET إلى /accounts/12345 HTTP / 1.1 Host : bank.example.com

الجواب هو:

HTTP / 1.1 200 OK { "حساب": { رقم الحساب: 12345 "توازن": { العملة: الدولار الأمريكي القيمة: 100.00 }, "الروابط": { "الودائع": "/accounts/12345/deposits", عمليات السحب: "/accounts/12345/withdrawals"، "التحويلات": "/accounts/12345/transfers", "close-requests": "/accounts/12345/close-requests" } } } 

يحتوي الرد على روابط المتابعة المحتملة التالية: إرسال طلب إيداع أو سحب أو تحويل أو إغلاق (لإغلاق الحساب).

على سبيل المثال، لاحقاً، بعد أن يصبح الحساب مكشوفاً، ستكون هناك مجموعة مختلفة من الروابط المتاحة، لأن الحساب مكشوف.

HTTP / 1.1 200 OK { "حساب": { رقم الحساب: 12345 "توازن": { العملة: الدولار الأمريكي "القيمة": -25.00 }, "الروابط": { "الودائع": "/accounts/12345/deposits" } } } 

الآن، لا يتوفر سوى رابط واحد: لإيداع المزيد من الأموال (عن طريق إرسال طلب POST إلى قسم الإيداعات). في الوضع الحالي ، الروابط الأخرى غير متاحة. ومن هنا جاء مصطلح " محرك حالة التطبيق" . وتختلف الإجراءات الممكنة باختلاف حالة المورد.

لا يحتاج العميل إلى فهم جميع أنواع الوسائط وآليات الاتصال التي يوفرها الخادم. يمكن اكتساب القدرة على فهم أنواع الوسائط الجديدة أثناء التشغيل من خلال " البرمجة عند الطلب " التي يوفرها الخادم للعميل. [ 2 ]

الأصول

يُعدّ قيد HATEOAS جزءًا أساسيًا من ميزة " الواجهة الموحدة " في REST، كما هو مُعرّف في أطروحة الدكتوراه لروي فيلدينغ . [ 2 ] وقد شرح فيلدينغ هذا المفهوم بتفصيل أكبر في مدونته. [ 3 ]

يوضح فيلدينغ أن الغرض من بعض القيود الصارمة في هذا المعيار وغيره من معايير REST هو "تصميم البرمجيات على مدى عقود: فكل تفصيل يهدف إلى تعزيز استدامة البرمجيات وتطورها المستقل. وتتعارض العديد من هذه القيود بشكل مباشر مع الكفاءة على المدى القصير. وللأسف، يجيد الناس التصميم قصير المدى، لكنهم عادةً ما يكونون سيئين في التصميم طويل المدى". [ 3 ]

التطبيقات

النص التشعبي

  • لغة HTML نفسها عبارة عن وسائط متعددة، حيث يتحكم العنصر <head> في طلبات HTTP للروابط. [ 3 ] [ 5 ] يُضيف Htmx امتدادات إلى HTML للسماح لعناصر أخرى غير <head> و <head> بالتحكم في الطلبات.<form>...</form><form>...</form><a>...</a>

JSON/XML

  • HAL ، وسائط متعددة مبنية على JSON أو XML . تحدد الروابط، ولكن ليس الإجراءات (طلبات HTTP).
  • JSON-LD ، معيار للروابط التشعبية في JSON. لا يتناول الإجراءات.
    • هيدرا . يعتمد على JSON-LD لإضافة تعريف الإجراءات. [ 6 ]
  • Siren ، وسائط متعددة مبنية على JSON. تحدد الروابط والإجراءات. [ 7 ]
  • Collection+JSON ، وسائط متعددة مبنية على JSON. تحدد الروابط والإجراءات. [ 8 ]
  • JSON:API, defines links and actions.[9]

See also

References

  1. M. Kelly (21 April 2024). "Internet Draft : JSON Hypertext Application Language". datatracker.ietf.org.
  2. 123Fielding, Roy Thomas (2000). "Rizwan.Ali 03014821766 State Transfer (REST)". Architectural Styles and the Design of Network-based Software Architectures (PhD). University of California, Irvine. p. 82. ISBN 0599871180.
  3. 1234Fielding, Roy T. (20 Oct 2008). "REST APIs must be hypertext-driven". Retrieved 20 May 2010.
  4. Thijssen, Joshua (2016-10-29). "What is HATEOAS and why is it important for my REST API?". REST CookBook. Retrieved 2020-02-05.
  5. Gross, Carson. "HATEOAS". htmx.org. This, despite the fact that neither XML nor JSON was a natural hypermedia in the same manner as HTML.
  6. "Hydra: Hypermedia-Driven Web APIs". Retrieved 2021-10-27.
  7. Siren: a hypermedia specification for representing entities on GitHub
  8. "Collection+JSON - Hypermedia Type". Retrieved 2021-10-25.
  9. "JSON API: Latest Specification". Retrieved 2021-10-25.