يوضّح هذا المستند كيفية استخدام الإشعارات الفورية التي تُعلم تطبيقك عند حدوث تغيير في أحد الموارد.
نظرة عامة
توفّر Directory API إشعارات فورية تتيح لك تتبُّع التغييرات في الموارد. يمكنك استخدام هذه الميزة لتحسين أداء تطبيقك. تتيح لك هذه الميزة إلغاء التكاليف الإضافية المتعلقة بالشبكة والحوسبة، والتي تنطوي على استطلاع الموارد لتحديد ما إذا كانت قد تغيّرت. عندما يتغيّر أحد الموارد التي تتم مراقبتها، ترسل واجهة Directory API إشعارًا إلى تطبيقك.
لاستخدام الإشعارات الفورية، يجب إجراء ما يلي:
اضبط عنوان URL للتلقّي أو جهاز استقبال الردّ التلقائي على الويب.
هذا هو خادم HTTPS يعالج رسائل الإشعارات الخاصة بواجهة برمجة التطبيقات التي يتم تفعيلها عند تغيير أحد الموارد.
إعداد قناة إشعارات لكل نقطة نهاية خاصة بمورد تريد مراقبتها
تحدّد القناة معلومات التوجيه لرسائل الإشعارات. كجزء من عملية إعداد القناة، يجب تحديد عنوان URL المحدّد الذي تريد تلقّي الإشعارات عليه. عندما يتغيّر مصدر قناة، ترسل واجهة برمجة التطبيقات Directory API رسالة إشعار كطلب إلى عنوان URL هذا.
POST
في الوقت الحالي، تتيح Directory API تلقّي إشعارات بشأن التغييرات التي تطرأ على مورد المستخدمون.
إنشاء قنوات الإشعارات
لطلب إشعارات فورية، يجب إعداد قناة إشعارات لكل مورد تريد مراقبته. بعد إعداد قنوات الإشعارات، ستُعلم واجهة برمجة التطبيقات Directory API تطبيقك عند حدوث أي تغييرات في الموارد التي تتم مراقبتها.
تقديم طلبات بشأن الساعة
يتضمّن كل مورد قابل للمشاهدة في Directory API طريقة watch مرتبطة به على معرف موارد منتظم (URI) بالشكل التالي:
https://www.googleapis.com/API_NAME/API_VERSION/RESOURCE_PATH/watch
لإعداد قناة إشعارات لتلقّي رسائل حول التغييرات التي تطرأ على مورد معيّن، أرسِل طلب POST إلى طريقة watch الخاصة بالمورد.
ترتبط كل قناة إشعارات بمستخدم معيّن ومورد معيّن (أو مجموعة من الموارد). لن ينجح طلب watch إلا إذا كان المستخدم الحالي أو حساب الخدمة يملك المورد أو لديه إذن بالوصول إليه.
أمثلة
تتّخذ جميع طلبات المشاهدة للمورد User لنطاق واحد الشكل العام التالي:
POST https://admin.googleapis.com/admin/directory/v1/users/watch?domain=domain&event=event
Authorization: Bearer auth_token_for_current_user
Content-Type: application/json
{
"id": "01234567-89ab-cdef-0123456789ab",
"type": "web_hook",
"address": "https://mydomain.com/notifications",
...
"token": "target=myApp-myFilesChannelDest",
"params": {
"ttl": 3600
}
}في نص الطلب، أدخِل معرّف قناتك id، وtype كـ web_hook، وعنوان URL الذي ستتلقّى فيه البيانات في address.
يمكنك أيضًا تقديم المعلومات الاختيارية التالية:
tokenلاستخدامه كرمز مميّز لقناتكttlفيparamsلطلب وقت البقاء على قيد الحياة لهذه القناة بالثواني.
استخدِم المَعلمتَين domain وevent لتحديد النطاق ونوع الحدث الذي تريد تلقّي إشعارات بشأنه.
تتّخذ جميع طلبات المشاهدة الخاصة بمورد المستخدم لأحد العملاء الشكل العام التالي:
POST https://admin.googleapis.com/admin/directory/users/v1/watch?customer=customer&event=event
Authorization: Bearer auth_token_for_current_user
Content-Type: application/json
{
"id": "01234567-89ab-cdef-0123456789ab",
"type": "web_hook",
"address": "https://mydomain.com/notifications",
...
"token": "target=myApp-myFilesChannelDest",
"params": {
"ttl": 3600
}
}استخدِم المَعلمتَين customer وevent لتحديد المعرّف الفريد لحساب العميل على Google ونوع الحدث الذي تريد تلقّي إشعارات بشأنه.
القيم المحتمَلة لـ event هي:
-
add: حدث بدأه المستخدم -
delete: حدث حذف المستخدم makeAdmin: حدث تغيير حالة مشرف المستخدم-
undelete: حدث إلغاء حذف المستخدم -
update: حدث تعديل المستخدم
ملاحظة: تم حذف نص الطلب في الأمثلة التالية لتوضيحها.
مراقبة الأحداث التي أنشأها المستخدم للنطاق mydomain.com:
POST https://admin.googleapis.com/admin/directory/v1/users/watch?domain=mydomain.com&event=add
ابحث عن الأحداث التي أنشأها المستخدم للعميل my_customer:
POST https://admin.googleapis.com/admin/directory/v1/users/watch?customer=my_customer&event=add
الخصائص المطلوبة
مع كل طلب watch، يجب تقديم الحقول التالية:
-
سلسلة
idللسمة تحدّد بشكل فريد قناة الإشعارات الجديدة هذه ضمن مشروعك. ننصحك باستخدام معرّف فريد عالميًا (UUID) أو أي سلسلة فريدة مشابهة. الحد الأقصى للطول: 64 حرفًا.يتم إعادة عرض قيمة المعرّف التي تحدّدها في عنوان
X-Goog-Channel-IdHTTP لكل رسالة إشعار تتلقّاها لهذه القناة. -
سلسلة سمة
typeتم ضبطها على القيمةweb_hook -
سلسلة قيمة السمة
addressتم ضبطها على عنوان URL الذي يستمع إلى الإشعارات ويردّ عليها في قناة الإشعارات هذه. هذا هو عنوان URL الخاص بوظيفة رد الاتصال الخاصة بخطاف الويب، ويجب أن يستخدم بروتوكول HTTPS.يُرجى العِلم أنّ Directory API يمكنه إرسال الإشعارات إلى عنوان HTTPS هذا فقط إذا كانت هناك شهادة طبقة مقابس آمنة (SSL) صالحة مثبّتة على خادم الويب. تشتمل الشهادات غير الصالحة على:
- الشهادات الموقعة ذاتيًا.
- الشهادات الموقَّعة من مصدر غير موثوق به.
- الشهادات التي تم إبطالها.
- الشهادات التي يتضمّن موضوعها اسم مضيف لا يتطابق مع اسم المضيف المستهدف
السمات الاختيارية
يمكنك أيضًا تحديد هذه الحقول الاختيارية مع طلبك watch:
-
سمة
tokenتحدّد قيمة سلسلة نصية عشوائية لاستخدامها كرمز مميّز للقناة. يمكنك استخدام رموز مميّزة لقنوات الإشعارات لأغراض مختلفة. على سبيل المثال، يمكنك استخدام الرمز المميز للتحقّق من أنّ كل رسالة واردة مخصّصة لقناة أنشأها تطبيقك، وذلك لضمان عدم تزوير الإشعار، أو لتوجيه الرسالة إلى الوجهة الصحيحة داخل تطبيقك استنادًا إلى الغرض من هذه القناة. الحد الأقصى للطول: 256 حرفًا.يتم تضمين الرمز المميز في عنوان HTTP
X-Goog-Channel-Tokenفي كل رسالة إشعار يتلقّاها تطبيقك لهذه القناة.في حال استخدام رموز مميّزة لقنوات الإشعارات، ننصحك بما يلي:
استخدِم تنسيق ترميز قابل للتوسيع، مثل مَعلمات طلب البحث في عنوان URL. مثلاً:
forwardTo=hr&createdBy=mobileيُرجى عدم تضمين بيانات حساسة، مثل رموز OAuth المميزة.
-
سلسلة موقع
expirationتم ضبطها على طابع زمني بتنسيق Unix (بالملّي ثانية) للتاريخ والوقت اللذين تريد أن تتوقف فيهما Directory API عن إرسال الرسائل إلى قناة الإشعارات هذه.إذا كانت القناة تتضمّن وقت انتهاء صلاحية، سيتم تضمينه كقيمة لعنوان HTTP
X-Goog-Channel-Expiration(بتنسيق قابل للقراءة) في كل رسالة إشعار يتلقّاها تطبيقك لهذه القناة.
لمزيد من التفاصيل حول الطلب، يُرجى الرجوع إلى طريقة watch الخاصة بمورد المستخدمون في "مرجع واجهة برمجة التطبيقات".
مشاهدة الردّ
إذا نجح طلب watch في إنشاء قناة إشعارات، سيعرض رمز الحالة 200 OK HTTP.
يتضمّن نص رسالة استجابة المشاهدة معلومات عن قناة الإشعارات التي أنشأتها للتو، كما هو موضّح في المثال أدناه.
{
"kind": "api#channel",
"id": "01234567-89ab-cdef-0123456789ab",
"resourceId": "B4ibMJiIhTjAQd7Ff2K2bexk8G4",
"resourceUri": "https://admin.googleapis.com/admin/directory/v1/users?domain=domain&event=event",
"token": "target=myApp-myFilesChannelDest",
"expiration": 1384823632000
}يوفّر نص الاستجابة تفاصيل القناة، مثل:
id: المعرّف الذي حدّدته لهذه القناة.-
resourceId: معرّف المورد الذي تمّت مشاهدته. resourceUri: المعرّف الخاص بإصدار المورد الذي تمت مشاهدته.-
token: الرمز المميّز المقدَّم في نص الطلب -
expiration: وقت انتهاء صلاحية القناة كطابع زمني لحقبة Unix بالملي ثانية.
بالإضافة إلى السمات التي أرسلتها كجزء من طلبك، تتضمّن المعلومات التي تم إرجاعها أيضًا resourceId وresourceUri لتحديد المرجع الذي تتم مشاهدته على قناة الإشعارات هذه.
يمكنك تمرير المعلومات التي تم إرجاعها إلى عمليات أخرى خاصة بقنوات الإشعارات، مثلاً عندما تريد التوقّف عن تلقّي الإشعارات.
لمزيد من التفاصيل حول الردّ، يُرجى الرجوع إلى طريقة watch
للمرجع Users في دليل API المرجعي.
رسالة المزامنة
بعد إنشاء قناة إشعارات لمراقبة أحد الموارد، يرسل Directory API رسالة sync للإشارة إلى أنّ الإشعارات ستبدأ. قيمة عنوان HTTP X-Goog-Resource-State لهذه الرسائل هي sync. بسبب مشاكل التوقيت في الشبكة، من المحتمل أن تتلقّى الرسالة sync حتى قبل تلقّي استجابة الطريقة watch.
يمكنك تجاهل الإشعار sync، ولكن يمكنك أيضًا استخدامه. على سبيل المثال، إذا قررت عدم الاحتفاظ بالقناة، يمكنك استخدام القيمتَين X-Goog-Channel-ID وX-Goog-Resource-ID في طلب التوقّف عن تلقّي الإشعارات. يمكنك أيضًا استخدام إشعار sync لإجراء بعض عمليات التهيئة استعدادًا للأحداث اللاحقة.
في ما يلي تنسيق رسائل sync التي ترسلها Directory API إلى عنوان URL المستلِم.
POST https://mydomain.com/notifications // Your receiving URL. X-Goog-Channel-ID: channel-ID-value X-Goog-Channel-Token: channel-token-value X-Goog-Channel-Expiration: expiration-date-and-time // In human-readable format. Present only if the channel expires. X-Goog-Resource-ID: identifier-for-the-watched-resource X-Goog-Resource-URI: version-specific-URI-of-the-watched-resource X-Goog-Resource-State: sync X-Goog-Message-Number: 1
تحتوي رسائل المزامنة دائمًا على قيمة X-Goog-Message-Number في عنوان HTTP تساوي 1. يحتوي كل إشعار لاحق لهذه القناة على رقم رسالة أكبر من الرقم السابق، مع العلم أنّ أرقام الرسائل لن تكون متسلسلة.
تجديد قنوات الإشعارات
يمكن أن تتضمّن قناة الإشعارات وقت انتهاء صلاحية، مع قيمة يحدّدها طلبك أو أي حدود أو إعدادات تلقائية داخلية في Directory API (يتم استخدام القيمة الأكثر تقييدًا). يتم تضمين وقت انتهاء صلاحية القناة، إذا كان لديها وقت انتهاء صلاحية، كـ طابع زمني بتوقيت يونكس (بالمللي ثانية) في المعلومات التي تعرضها الطريقة watch. بالإضافة إلى ذلك، يتم تضمين تاريخ ووقت انتهاء الصلاحية (بتنسيق قابل للقراءة) في كل رسالة إشعار يتلقّاها تطبيقك لهذه القناة في عنوان X-Goog-Channel-Expiration HTTP.
لا تتوفّر حاليًا طريقة تلقائية لتجديد قناة إشعارات. عندما توشك صلاحية قناة على الانتهاء، عليك استبدالها بقناة جديدة من خلال استدعاء الطريقة watch. كما هو الحال دائمًا، يجب استخدام قيمة فريدة للسمة id الخاصة بالقناة الجديدة. يُرجى العِلم أنّه من المحتمل أن تتداخل الفترة الزمنية التي تكون فيها قناتا الإشعارات للمورد نفسه نشطتَين.
تلقّي إشعارات
عندما يتغيّر أي مصدر تمت مراقبته، يتلقّى تطبيقك رسالة إشعار تصف التغيير. ترسل Directory API هذه الرسائل كطلبات HTTPS POST إلى عنوان URL الذي حدّدته كسمة address لقناة الإشعارات هذه.
تفسير تنسيق رسالة الإشعار
تتضمّن جميع رسائل الإشعارات مجموعة من عناوين HTTP التي تتضمّن البادئات X-Goog-.
يمكن أن تتضمّن بعض أنواع الإشعارات أيضًا نص الرسالة.
العناوين
تتضمّن رسائل الإشعارات التي تنشرها Directory API إلى عنوان URL المستلِم عناوين HTTP التالية:
| العنوان | الوصف |
|---|---|
| الظهور دائمًا | |
|
تمثّل هذه السمة المعرّف الفريد العالمي (UUID) أو سلسلة فريدة أخرى قدّمتها لتحديد قناة الإشعارات هذه. |
|
عدد صحيح يحدّد هذه الرسالة لقناة الإشعارات هذه. تكون القيمة دائمًا 1 لرسائل sync. تزداد أرقام الرسائل مع كل رسالة لاحقة على القناة، ولكنّها ليست متسلسلة. |
|
قيمة مبهمة تحدّد المورد الذي تتم مراقبته. ويظلّ رقم التعريف هذا ثابتًا في جميع إصدارات واجهة برمجة التطبيقات. |
|
حالة المرجع الجديد التي شغّلت الإشعار
القيم المحتملة:
sync أو اسم حدث
|
|
معرّف خاص بإصدار واجهة برمجة التطبيقات للمورد الذي تمت مشاهدته |
| موجودة أحيانًا | |
|
تاريخ ووقت انتهاء صلاحية قناة الإشعارات، ويتم التعبير عنهما بتنسيق قابل للقراءة. يظهر هذا الحقل فقط إذا تم تحديده. |
|
رمز مميّز لقناة الإشعارات تم ضبطه بواسطة تطبيقك، ويمكنك استخدامه للتحقّق من مصدر الإشعار. يجب أن يكون هذا الحقل متوفّرًا فقط إذا تم تحديد قيمة له. |
تحتوي رسائل الإشعارات للمستخدمين على المعلومات التالية في نص الطلب:
| الموقع | الوصف |
|---|---|
kind |
تحدّد هذه السمة أنّها مورد "مستخدم". القيمة: السلسلة الثابتة "admin#directory#user". |
id |
المعرّف الفريد لمورد المستخدم. |
etag |
تمثّل هذه السمة علامة ETag لرسالة الإشعار. يختلف عن ETag الخاص بمورد المستخدم. |
primaryEmail |
عنوان البريد الإلكتروني الأساسي للمستخدم |
أمثلة
تتّخذ رسائل الإشعارات الخاصة بأحداث الموارد User الشكل العام التالي:
POST https://mydomain.com/notifications
Content-Type: application/json; utf-8
Content-Length: 0
X-Goog-Channel-ID: directoryApiId
X-Goog-Channel-Token: 398348u3tu83ut8uu38
X-Goog-Channel-Expiration: Tue, 29 Oct 2013 20:32:02 GMT
X-Goog-Resource-ID: ret08u3rv24htgh289g
X-Goog-Resource-URI: https://admin.googleapis.com/admin/directory/v1/users?domain=domain&event=event
X-Goog-Resource-State: event
X-Goog-Message-Number: 10
{
"kind": "admin#directory#user",
"id": long,
"etag": string,
"primaryEmail": string
}
في ما يلي مثال على حدث حذف مستخدم:
POST https://mydomain.com/notifications
Content-Type: application/json; utf-8
Content-Length: 189
X-Goog-Channel-ID: deleteChannel
X-Goog-Channel-Token: 245t1234tt83trrt333
X-Goog-Channel-Expiration: Mon, 09 Dec 2013 22:24:23 GMT
X-Goog-Resource-ID: B4ibMJiIhTjAQd7Ff2K2bexk8G4
X-Goog-Resource-URI: https://admin.googleapis.com/admin/directory/v1/users?domain=mydomain.com&event=delete&alt=json
X-Goog-Resource-State: delete
X-Goog-Message-Number: 236440
{
"kind": "admin#directory#user",
"id": "111220860655841818702",
"etag": "\"Mf8RAmnABsVfQ47MMT_18MHAdRE/evLIDlz2Fd9zbAqwvIp7Pzq8UAw\"",
"primaryEmail": "user@mydomain.com"
}
الرد على الإشعارات
للإشارة إلى النجاح، يمكنك عرض أي من رموز الحالة التالية:
200 أو 201 أو 202 أو 204 أو
102.
إذا كانت خدمتك تستخدم مكتبة برامج العميل لواجهة برمجة التطبيقات من Google وتعرض الرموز 500 أو 502 أو 503 أو 504، ستعيد واجهة برمجة التطبيقات Directory API المحاولة باستخدام التراجع الأسي.
ويُعدّ أي رمز حالة مرتجع آخر بمثابة تعذُّر إرسال الرسالة.
إيقاف الإشعارات
تتحكّم السمة expiration في وقت توقّف الإشعارات تلقائيًا. يمكنك اختيار إيقاف تلقّي الإشعارات لقناة معيّنة قبل انتهاء صلاحيتها من خلال استدعاء الطريقة stop على معرّف الموارد الموحّد التالي:
https://www.googleapis.com/admin/directory_v1/channels/stop
تتطلّب هذه الطريقة توفير السمتَين id وresourceId على الأقل للقناة، كما هو موضّح في المثال أدناه. يُرجى العِلم أنّه إذا كانت واجهة Directory API تتضمّن عدة أنواع من الموارد التي تتضمّن طرق watch، سيكون هناك طريقة stop واحدة فقط.
يمكن فقط للمستخدمين الذين لديهم الإذن المناسب إيقاف قناة. وعلى وجه الخصوص:
- إذا تم إنشاء القناة من خلال حساب مستخدم عادي، يمكن للمستخدم نفسه فقط إيقاف القناة من العميل نفسه (كما هو محدّد من خلال معرّفات عملاء OAuth 2.0 من رموز المصادقة) الذي أنشأ القناة.
- إذا تم إنشاء القناة من خلال حساب خدمة، يمكن لأي مستخدم من العميل نفسه إيقاف القناة.
يوضّح نموذج الرمز البرمجي التالي كيفية إيقاف تلقّي الإشعارات:
POST https://www.googleapis.com/admin/directory_v1/channels/stop
Authorization: Bearer CURRENT_USER_AUTH_TOKEN
Content-Type: application/json
{
"id": "4ba78bf0-6a47-11e2-bcfd-0800200c9a66",
"resourceId": "ret08u3rv24htgh289g"
}