يوضّح هذا المستند كيفية استخدام الإشعارات الفورية التي تُعلم تطبيقك عند تغيير أحد الموارد.
نظرة عامة
توفّر واجهة برمجة التطبيقات Directory API إشعارات فورية تتيح لك تتبُّع التغييرات في الموارد. يمكنك استخدام هذه الميزة لتحسين أداء تطبيقك. ويتيح لك ذلك إزالة تكاليف الشبكة والمعالجة الإضافية المرتبطة بالاستعلام عن الموارد لتحديد ما إذا كانت قد تغيّرت. عند تغيير مورد خاضع للتتبّع، تُرسِل واجهة برمجة التطبيقات Directory API إشعارًا إلى تطبيقك.
لاستخدام الإشعارات الفورية، عليك إجراء أمرَين:
إعداد عنوان URL لتلقّي الردّ أو جهاز استقبال الردّ التلقائي على الويب
هذا هو خادم HTTPS الذي يعالج رسائل إشعارات واجهة برمجة التطبيقات التي يتم تشغيلها عند تغيير أحد الموارد.
إعداد (قناة إشعارات) لكل نقطة نهاية للمورد تريد مراقبتها
تحدِّد القناة معلومات التوجيه لرسائل الإشعارات. كجزء من إعداد القناة، عليك تحديد عنوان URL المحدّد الذي تريد تلقّي الإشعارات عليه. عند تغيير مورد القناة، ترسِل واجهة برمجة التطبيقات Directory API رسالة إشعار كطلب
POST
إلى عنوان URL هذا.
تتيح Directory API حاليًا إرسال إشعارات بشأن التغييرات التي تطرأ على موارد Users.
إنشاء قنوات إشعارات
لطلب إشعارات فورية، عليك إعداد قناة إشعارات لكل مورد تريد مراقبته. بعد إعداد قنوات الإشعارات، تُعلم واجهة برمجة التطبيقات 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: Bearerauth_token_for_current_user Content-Type: application/json { "id": "01234567-89ab-cdef-0123456789ab", // Your channel ID. "type": "web_hook", "address": "https://mydomain.com/notifications", // Your receiving URL. ... "token": "target=myApp-myFilesChannelDest", // (Optional) Your channel token. "params": { "ttl": 3600 // (Optional) Your requested time-to-live for this channel. } }
استخدِم المَعلمتَين domain وevent لتحديد النطاق ونوع الحدث الذي تريد تلقّي إشعارات بشأنه.
جميع طلبات المشاهدة لمورد "المستخدِم" الخاص بالعميل لها الشكل العام التالي:
POST https://admin.googleapis.com/admin/directory/users/v1/watch?customer=customer &event=event Authorization: Bearerauth_token_for_current_user Content-Type: application/json { "id": "01234567-89ab-cdef-0123456789ab", // Your channel ID. "type": "web_hook", "address": "https://mydomain.com/notifications", // Your receiving URL. ... "token": "target=myApp-myFilesChannelDest", // (Optional) Your channel token. "params": { "ttl": 3600 // (Optional) Your requested time-to-live for this channel. } }
استخدِم المَعلمتَين 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-Id
عنوان HTTP لكل رسالة إشعار تتلقّاها من هذه القناة. -
سلسلة خاصية
type
تم ضبطها على القيمةweb_hook
-
سلسلة موقع
address
تم ضبطها على عنوان URL الذي يستمع ويستجيب للإشعارات في قناة الإشعارات هذه. هذا هو عنوان URL لطلب إعادة الاتصال بتطبيقك على الويب، ويجب أن يستخدم بروتوكول HTTPS.يُرجى العِلم أنّ واجهة برمجة التطبيقات Directory API لا يمكنها إرسال إشعارات إلى عنوان HTTPS هذا إلا إذا كانت هناك شهادة SSL صالحة مثبّتة على خادم الويب. تشتمل الشهادات غير الصالحة على:
- الشهادات الموقعة ذاتيًا.
- الشهادات الموقَّعة من مصدر غير موثوق به.
- الشهادات التي تم إبطالها.
- الشهادات التي تحتوي على موضوع لا يتطابق مع اسم المضيف المستهدف
السمات الاختيارية
يمكنك أيضًا تحديد هذه الحقول الاختيارية مع
watch
طلبك:
-
سمة
token
التي تحدّد قيمة سلسلة عشوائية لاستخدامها كرمز مميّز للقناة يمكنك استخدام علامات قناة الإشعارات لأغراض مختلفة. على سبيل المثال، يمكنك استخدام الرمز المميّز للتحقّق من أنّ كل رسالة واردة مخصّصة لقناة أنشأها تطبيقك، وذلك لضمان عدم التلاعب بالإشعار، أو لتوجيه الرسالة إلى الوجهة الصحيحة في تطبيقك استنادًا إلى الغرض من هذه القناة. الحد الأقصى للطول: 256 حرفًايتم تضمين الرمز المميّز في عنوان
X-Goog-Channel-Token
HTTP في كل رسالة إعلام يتلقّاها تطبيقك لهذه القناة.إذا كنت تستخدم الرموز المميّزة لقنوات الإشعارات، ننصحك باتّباع الخطوات التالية:
استخدِم تنسيق ترميز قابل للتوسيع، مثل معلَمات طلب البحث في عناوين URL. مثلاً:
forwardTo=hr&createdBy=mobile
لا تُدرِج بيانات حسّاسة، مثل رموز OAuth.
-
سلسلة موقع
expiration
تم ضبطها على طابع زمني لنظام التشغيل Unix (بالملي ثانية) للتاريخ والوقت اللذين تريد أن تتوقف فيهما Directory API عن إرسال الرسائل لقناة الإشعارات هذه.إذا كانت القناة لها وقت انتهاء صلاحية، يتم تضمينها كقيمة لعنوان
X-Goog-Channel-Expiration
HTTP (بتنسيق سهل القراءة ) في كل رسالة إشعار يتلقّاها تطبيقك لهذه القناة.
لمزيد من التفاصيل حول الطلب، يُرجى الرجوع إلى طريقة watch
لمورد Users في مرجع واجهة برمجة التطبيقات.
مشاهدة الرد
إذا أنشأ طلب watch
قناة إشعارات
بنجاح، يتم عرض رمز حالة HTTP 200 OK
.
يقدّم نص رسالة الاستجابة للمشاهدة معلومات عن قناة الإشعارات التي أنشأتها للتو، كما هو موضّح في المثال أدناه.
{ "kind": "api#channel", "id": "01234567-89ab-cdef-0123456789ab", // ID you specified for this channel. "resourceId": "B4ibMJiIhTjAQd7Ff2K2bexk8G4", // ID of the watched resource. "resourceUri": "https://admin.googleapis.com/admin/directory/v1/users?domain=domain &event=event ", // Version-specific ID of the watched resource. "token": "target=myApp-myFilesChannelDest", // Present only if one was provided. "expiration": 1384823632000, // Actual expiration time as Unix timestamp (in ms), if applicable. }
بالإضافة إلى المواقع التي أرسلتها كجزء من طلبك، تشمل
المعلومات المعروضة أيضًا resourceId
و
resourceUri
لتحديد المرجع الذي تتم مشاهدته في
قناة الإشعارات هذه.
يمكنك تمرير المعلومات المعروضة إلى عمليات أخرى في قناة الإشعارات، مثل إيقاف تلقّي الإشعارات.
لمزيد من التفاصيل حول الاستجابة، يُرجى الرجوع إلى طريقة watch
لمورد Users في مرجع واجهة برمجة التطبيقات.
رسالة المزامنة
بعد إنشاء قناة إشعارات لمشاهدة مورد، تُرسِل sync
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.
لا تتوفّر حاليًا طريقة تلقائية لتجديد قناة إشعارات. عندما يقترب موعد انتهاء صلاحية قناة، يجب استبدالها بقناة جديدة من خلال memanggil
metode watch
. وكما هو الحال دائمًا، يجب استخدام قيمة فريدة لسمة
id
في القناة الجديدة. يُرجى العِلم أنّه من المرجّح
أن تكون هناك فترة "تداخل" عندما تكون قناتا الإشعارات المخصّصتان
للمورد نفسه نشطتَين.
تلقّي إشعارات
عندما يتغيّر أحد الموارد التي يتم تتبُّعها، يتلقّى تطبيقك
رسالة إشعار توضّح التغيير. تُرسِل Directory API
هذه الرسائل كطلبات POST
عبر HTTPS إلى عنوان URL الذي حدّدته على أنّه
موقع address
لقناة الإشعارات
هذه.
تفسير تنسيق رسالة الإشعار
تتضمّن جميع رسائل الإشعارات مجموعة من رؤوس HTTP التي تحتوي على بادئات
X-Goog-
.
يمكن أن تتضمّن بعض أنواع الإشعارات أيضًا
نص الرسالة.
العناوين
تتضمّن رسائل الإشعارات التي تنشرها واجهة برمجة التطبيقات Directory API على عنوان URL المخصّص لتلقّيها عناوين HTTP التالية:
العنوان | الوصف |
---|---|
عرض دائم | |
|
معرّف UUID أو سلسلة فريدة أخرى قدّمتها لتحديد قناة الإشعارات هذه. |
|
عدد صحيح يحدِّد هذه الرسالة لقناة الإشعار
هذه. تكون القيمة دائمًا 1 لرسائل sync . تزداد أرقام الرسائل
مع كل رسالة لاحقة على القناة، ولكنها
ليست تسلسلية. |
|
قيمة غير شفافة تحدِّد المورد الذي تتم مراقبته يظلّ هذا المعرّف ثابتًا في جميع إصدارات واجهة برمجة التطبيقات. |
|
حالة المورد الجديدة التي أدّت إلى ظهور الإشعار
القيم المحتملة:
sync أو اسم حدث
|
|
معرّف خاص بإصدار واجهة برمجة التطبيقات للمورد الذي تتم مراقبته |
متوفرة أحيانًا | |
|
تاريخ ووقت انتهاء صلاحية قناة الإشعارات، معروضَين بتنسيق يمكن لشخص عادي قراءته لا يظهر هذا الحقل إلا إذا تم تحديده. |
|
رمز مفتاح قناة الإشعارات الذي ضبطه تطبيقك، والذي يمكنك استخدامه لإثبات صحة مصدر الإشعار لا يظهر إلا إذا كان محدّدًا. |
تحتوي رسائل الإشعارات المرسَلة إلى المستخدمين على المعلومات التالية في نص الطلب:
الموقع | الوصف |
---|---|
kind |
يحدِّد هذا المرجع على أنّه مستخدِم. القيمة: السلسلة الثابتة "admin#directory#user ". |
id |
المعرّف الفريد لمورد المستخدم |
etag |
علامة ETag لرسالة الإشعار يختلف عن علامة ETag لمورد User. |
primaryEmail |
عنوان البريد الإلكتروني الأساسي للمستخدم |
أمثلة
تتّبع رسائل الإشعارات لأحداث الموارد User
الشكل العام التالي:
POST https://mydomain.com/notifications // Your receiving URL. 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 // Your receiving URL. 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
على
عنوان URL التالي:
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: BearerCURRENT_USER_AUTH_TOKEN Content-Type: application/json { "id": "4ba78bf0-6a47-11e2-bcfd-0800200c9a66", "resourceId": "ret08u3rv24htgh289g" }