دليل سريع للبدء باستخدام JavaScript

يمكنكم إنشاء تطبيق ويب بلغة JavaScript يرسل طلبات إلى Google Tasks API.

توضّح أدلة التشغيل السريع كيفية إعداد تطبيق وتشغيله لاستدعاء Google Workspace API. يستخدم دليل التشغيل السريع هذا طريقة مصادقة مبسطة مناسبة لبيئة الاختبار. بالنسبة إلى بيئة الإنتاج، ننصحكم بالتعرّف على المصادقة والتفويض قبل اختيار بيانات الاعتماد المناسبة لتطبيقكم.

يستخدم دليل التشغيل السريع هذا مكتبات عملاء واجهة برمجة التطبيقات المقترَحة من Google Workspace للتعامل مع بعض تفاصيل عملية المصادقة والتفويض.

الأهداف

  • إعداد البيئة
  • إعداد النموذج
  • تشغيل النموذج

المتطلبات الأساسية

  • حساب على Google تم تفعيل "مهام Google" فيه

إعداد البيئة

لإكمال دليل التشغيل السريع هذا، يجب إعداد البيئة.

تفعيل واجهة برمجة التطبيقات

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

ضبط شاشة طلب الموافقة المتعلّقة ببروتوكول OAuth

إذا كنتم تستخدمون مشروعًا جديدًا على Google Cloud لإكمال دليل التشغيل السريع هذا، اضبطوا شاشة طلب الموافقة المتعلّقة ببروتوكول OAuth. إذا سبق لكم إكمال هذه الخطوة لمشروعكم على Cloud، انتقِلوا إلى القسم التالي.

  1. في Google API Console، انتقِلوا إلى "القائمة" menu > منصة Google للمصادقة > العلامة التجارية.

    الانتقال إلى العلامة التجارية

  2. إذا سبق لكم ضبط منصة Google للمصادقة، يمكنكم ضبط إعدادات شاشة طلب الموافقة المتعلّقة ببروتوكول OAuth التالية في العلامة التجارية والجمهور والوصول إلى البيانات. إذا ظهرت لكم رسالة لم يتم ضبط منصة Google للمصادقة بعد، انقروا على البدء:
    1. ضمن معلومات التطبيق، في اسم التطبيق، أدخِلوا اسمًا للتطبيق.
    2. في البريد الإلكتروني لدعم المستخدمين، اختاروا عنوان بريد إلكتروني للدعم يمكن للمستخدمين التواصل معكم من خلاله إذا كانت لديهم أسئلة حول موافقتهم.
    3. انقروا على التالي.
    4. ضمن الجمهور ، اختاروا داخلي.
    5. انقروا على التالي.
    6. ضمن معلومات الاتصال ، أدخِلوا عنوان بريد إلكتروني يمكنكم تلقّي إشعارات عليه بشأن أي تغييرات تطرأ على مشروعكم.
    7. انقروا على التالي.
    8. ضمن إنهاء، راجِعوا سياسة بيانات المستخدمين في خدمات Google API، وإذا كنتم موافقين عليها، اختاروا أوافق على "سياسة بيانات المستخدمين في خدمات Google API".
    9. انقروا على متابعة.
    10. انقروا على إنشاء.
  3. في الوقت الحالي، يمكنكم تخطّي إضافة النطاقات. في المستقبل، عند إنشاء تطبيق لاستخدامه خارج مؤسسة Google Workspace، يجب تغيير نوع المستخدم إلى خارجي. بعد ذلك، أضيفوا نطاقات التفويض التي يتطلبها تطبيقكم. لمزيد من المعلومات، اطّلِعوا على دليل ضبط الموافقة المتعلّقة ببروتوكول OAuth الكامل .

تفويض بيانات اعتماد لتطبيق ويب

لمصادقة المستخدمين النهائيين والوصول إلى بيانات المستخدمين في تطبيقكم، يجب إنشاء معرّف عميل واحد أو أكثر لبروتوكول OAuth 2.0. يُستخدم معرّف العميل لتعريف تطبيق واحد على خوادم OAuth من Google. إذا كان تطبيقكم يعمل على منصات متعددة، يجب إنشاء معرّف عميل منفصل لكل منصة.
  1. في Google API Console، انتقِلوا إلى "القائمة" > منصة Google للمصادقة > العملاء.

    الانتقال إلى العملاء

  2. انقروا على إنشاء عميل.
  3. انقروا على نوع التطبيق > تطبيق ويب.
  4. في حقل الاسم ، اكتبوا اسمًا لبيانات الاعتماد. لا يظهر هذا الاسم إلا في Google API Console.
  5. أضيفوا معرّفات الموارد المنتظمة (URI) المسموح بها المرتبطة بتطبيقكم:
    • التطبيقات من جهة العميل (JavaScript): ضمن مصادر JavaScript المسموح بها، انقروا على إضافة معرّف الموارد المنتظم (URI). بعد ذلك، أدخِلوا معرّف الموارد المنتظم (URI) لاستخدامه في طلبات المتصفح. يحدّد هذا المعرّف النطاقات التي يمكن لتطبيقكم إرسال طلبات واجهة برمجة التطبيقات منها إلى خادم OAuth 2.0.
    • التطبيقات من جهة الخادم (Java وPython والمزيد): ضمن معرّفات الموارد المنتظمة (URI) المسموح بها لإعادة التوجيه، انقروا على إضافة معرّف الموارد المنتظم (URI). بعد ذلك، أدخِلوا معرّف الموارد المنتظم (URI) لنقطة نهاية يمكن لخادم OAuth 2.0 إرسال الردود إليه.
  6. انقروا على إنشاء.

    تظهر بيانات الاعتماد التي تم إنشاؤها حديثًا ضمن معرّفات عملاء OAuth 2.0.

    دوِّنوا معرّف العميل. لا تُستخدم أسرار العميل لتطبيقات الويب.

دوِّنوا بيانات الاعتماد هذه لأنكم ستحتاجون إليها لاحقًا في دليل التشغيل السريع هذا.

إنشاء مفتاح واجهة برمجة تطبيقات

  1. في Google Cloud Console، انتقِلوا إلى "القائمة" > واجهات برمجة التطبيقات والخدمات > بيانات الاعتماد.

    الانتقال إلى بيانات الاعتماد

  2. انقروا على إنشاء بيانات اعتماد > مفتاح واجهة برمجة تطبيقات.
  3. يظهر مفتاح واجهة برمجة التطبيقات الجديد.
    • انقروا على "نسخ" لنسخ مفتاح واجهة برمجة التطبيقات لاستخدامه في رمز تطبيقكم. يمكنكم أيضًا العثور على مفتاح واجهة برمجة التطبيقات في قسم "مفاتيح واجهة برمجة التطبيقات" ضمن بيانات اعتماد مشروعكم.
    • لمنع الاستخدام غير المصرّح به، ننصحكم بتقييد الأماكن وواجهات برمجة التطبيقات التي يمكن استخدام مفتاح واجهة برمجة التطبيقات فيها. لمزيد من التفاصيل، اطّلِعوا على مقالة إضافة قيود على واجهة برمجة التطبيقات.

إعداد النموذج

  1. في دليل العمل، أنشئوا ملفًا باسم index.html.
  2. في الملف index.html، الصقوا رمزًا نموذجيًا:

    tasks/quickstart/index.html
    <!DOCTYPE html>
    <html>
      <head>
        <title>Tasks API Quickstart</title>
        <meta charset="utf-8" />
      </head>
      <body>
        <p>Tasks API Quickstart</p>
    
        <!--Add buttons to initiate auth sequence and sign out-->
        <button id="authorize_button" >Authorize</button>
        <button id="signout_button" >Sign Out</button>
    
        <pre id="content" style="white-space: pre-wrap;"></pre>
    
        <script type="text/javascript">
          /* exported gapiLoaded */
          /* exported gisLoaded */
          /* exported handleAuthClick */
          /* exported handleSignoutClick */
    
          // TODO(developer): Set to client ID and API key from the Developer Console
          const CLIENT_ID = '<YOUR_CLIENT_ID>';
          const API_KEY = '<YOUR_API_KEY>';
    
          // Discovery doc URL for APIs used by the quickstart
          const DISCOVERY_DOC = 'https://www.googleapis.com/discovery/v1/apis/tasks/v1/rest';
    
          // Authorization scopes required by the API; multiple scopes can be
          // included, separated by spaces.
          const SCOPES = 'https://www.googleapis.com/auth/tasks.readonly';
    
          let tokenClient;
          let gapiInited = false;
          let gisInited = false;
    
          document.getElementById('authorize_button').style.visibility = 'hidden';
          document.getElementById('signout_button').style.visibility = 'hidden';
    
          /**
           * Callback after api.js is loaded.
           */
          function gapiLoaded() {
            gapi.load('client', initializeGapiClient);
          }
    
          /**
           * Callback after the API client is loaded. Loads the
           * discovery doc to initialize the API.
           */
          async function initializeGapiClient() {
            await gapi.client.init({
              apiKey: API_KEY,
              discoveryDocs: [DISCOVERY_DOC],
            });
            gapiInited = true;
            maybeEnableButtons();
          }
    
          /**
           * Callback after Google Identity Services are loaded.
           */
          function gisLoaded() {
            tokenClient = google.accounts.oauth2.initTokenClient({
              client_id: CLIENT_ID,
              scope: SCOPES,
              callback: '', // defined later
            });
            gisInited = true;
            maybeEnableButtons();
          }
    
          /**
           * Enables user interaction after all libraries are loaded.
           */
          function maybeEnableButtons() {
            if (gapiInited && gisInited) {
              document.getElementById('authorize_button').style.visibility = 'visible';
            }
          }
    
          /**
           *  Sign in the user upon button click.
           */
          function handleAuthClick() {
            tokenClient.callback = async (resp) => {
              if (resp.error !== undefined) {
                throw (resp);
              }
              document.getElementById('signout_button').style.visibility = 'visible';
              document.getElementById('authorize_button').innerText = 'Refresh';
              await fetchTaskLists();
            };
    
            if (gapi.client.getToken() === null) {
              // Prompt the user to select a Google Account and ask for consent to share their data
              // when establishing a new session.
              tokenClient.requestAccessToken({prompt: 'consent'});
            } else {
              // Skip display of account chooser and consent dialog for an existing session.
              tokenClient.requestAccessToken({prompt: ''});
            }
          }
    
          /**
           *  Sign out the user upon button click.
           */
          function handleSignoutClick() {
            const token = gapi.client.getToken();
            if (token !== null) {
              google.accounts.oauth2.revoke(token.access_token);
              gapi.client.setToken('');
              document.getElementById('content').innerText = '';
              document.getElementById('authorize_button').innerText = 'Authorize';
              document.getElementById('signout_button').style.visibility = 'hidden';
            }
          }
    
          /**
           * Print task lists.
           */
          async function fetchTaskLists() {
            let response;
            try {
              response = await gapi.client.tasks.tasklists.list({
                'maxResults': 10,
              });
            } catch (err) {
              document.getElementById('content').innerText = err.message;
              return;
            }
            const taskLists = response.result.items;
            if (!taskLists || taskLists.length == 0) {
              document.getElementById('content').innerText = 'No task lists found.';
              return;
            }
            // Flatten to string to display
            const output = taskLists.reduce(
                (str, taskList) => `${str}${taskList.title} (${taskList.id})\n`,
                'Task lists:\n');
            document.getElementById('content').innerText = output;
          }
        </script>
        <script async defer src="https://apis.google.com/js/api.js" ></script>
        <script async defer src="https://accounts.google.com/gsi/client" ></script>
      </body>
    </html>

    غيِّروا القيم في السلسلة على الشكل التالي:

تشغيل النموذج

  1. في دليل العمل، ثبِّتوا حزمة http-server:

    npm install http-server
    
  2. في دليل العمل، ابدأوا خادم ويب:

    npx http-server -p 8000
    
  1. في المتصفح، انتقِلوا إلى http://localhost:8000.
  2. سيظهر لكم طلب تفويض الوصول:
    1. إذا لم يسبق لكم تسجيل الدخول إلى حساب Google، سجِّلوا الدخول عندما يُطلب منكم ذلك. إذا كنتم مسجّلين الدخول إلى حسابات متعددة، اختاروا حسابًا واحدًا لاستخدامه في التفويض.
    2. انقروا على حسنًا.

سيتم تشغيل تطبيق JavaScript واستدعاء Google Tasks API.

الخطوات التالية