این سند برای توسعه دهندگانی در نظر گرفته شده است که می خواهند کتابخانه های مشتری، افزونه های IDE و ابزارهای دیگر برای تعامل با Google API بنویسند. سرویس Google APIs Discovery به شما این امکان را میدهد تا با افشای ابردادههای قابل خواندن ماشینی در مورد سایر APIهای Google از طریق یک API ساده، همه موارد فوق را انجام دهید. این راهنما یک نمای کلی از هر بخش از سند Discovery و همچنین نکات مفیدی در مورد نحوه استفاده از سند ارائه می دهد.
همه تماسها به API، درخواستهای REST مبتنی بر JSON هستند که از SSL استفاده میکنند، به عبارت دیگر، URLها با https
شروع میشوند.
قالب سند کشف
این بخش یک نمای کلی از سند Discovery ارائه می دهد.
همه مثالهای زیر از سند Discovery از سرویس Usage API استفاده میکنند. با اجرای این درخواست GET
میتوانید سند Discovery را برای سرویس Usage API بارگیری کنید:
GET https://serviceusage.googleapis.com/$discovery/rest?version=v1
قالب یک سند کشف شامل اطلاعاتی است که در شش دسته اصلی قرار می گیرند:
- توضیحات اولیه API
- اطلاعات احراز هویت برای API.
- جزئیات منبع و طرحواره که داده های API را توصیف می کند.
- جزئیات در مورد روش های API .
- اطلاعات مربوط به هر ویژگی سفارشی پشتیبانی شده توسط API.
- اسناد درون خطی که عناصر کلیدی API را توصیف می کند.
هر یک از این بخش های سند Discovery در زیر توضیح داده شده است.
توضیحات پایه API
سند Discovery شامل مجموعه ای از ویژگی های خاص API است. این ویژگی ها لزوماً به این ترتیب یا در همان بخش سند کشف ظاهر نمی شوند:
"id": "serviceusage:v1", "canonicalName": "Service Usage", "revision": "20240331", "servicePath": "", "baseUrl": "https://serviceusage.googleapis.com/", "kind": "discovery#restDescription", "description": "Enables services that service consumers want to use on Google Cloud Platform, lists the available or enabled services, or disables services that service consumers no longer use.", "ownerDomain": "google.com", "version_module": true, "version": "v1", "fullyEncodeReservedExpansion": true, "name": "serviceusage", "title": "Service Usage API", "discoveryVersion": "v1", "rootUrl": "https://serviceusage.googleapis.com/", "protocol": "rest"
این ویژگیهای سطح API شامل جزئیات مربوط به یک نسخه خاص از یک API، از جمله name
، version
، title
و description
. protocol
همیشه مقدار ثابتی از rest
دارد، زیرا سرویس کشف APIها فقط از روشهای RESTful برای دسترسی به APIها پشتیبانی میکند.
قسمت servicePath
پیشوند مسیر را برای این نسخه API خاص نشان می دهد.
احراز هویت
بخش auth
حاوی جزئیاتی در مورد حوزه های تأیید OAuth 2.0 برای API است. برای کسب اطلاعات بیشتر در مورد نحوه استفاده از دامنهها با OAuth 2.0، به استفاده از OAuth 2.0 برای دسترسی به Google API مراجعه کنید.
بخش auth
شامل oauth2
تودرتو و بخش scopes
است. بخش scopes
یک نگاشت کلید/مقدار از مقدار scope تا جزئیات بیشتر در مورد محدوده است:
"auth": { "oauth2": { "scopes": { "https://www.googleapis.com/auth/cloud-platform": { "description": "See, edit, configure, and delete your Google Cloud data and see the email address for your Google Account." }, "https://www.googleapis.com/auth/cloud-platform.read-only": { "description": "View your data across Google Cloud services and see the email address of your Google Account" }, "https://www.googleapis.com/auth/service.management": { "description": "Manage your Google API service configuration" } } } }
بخش auth
فقط محدوده های یک API خاص را تعریف می کند. برای آشنایی با نحوه ارتباط این حوزهها با یک روش API، به بخش روشها در زیر مراجعه کنید.
منابع و طرحواره ها
عملیات یک API بر روی اشیاء داده ای به نام resources
عمل می کند. سند Discovery بر اساس مفهوم منابع ساخته شده است. هر سند Discovery یک بخش resources
سطح بالایی دارد که تمام منابع مرتبط با API را گروه بندی می کند. به عنوان مثال، سرویس Usage API دارای یک منبع services
و یک منبع operations
تحت resources
سطح بالا است:
"resources": { "services": { // Methods associated with the services resource } "operations": { // Methods associated with the operations resource } }
در داخل هر بخش منبع، روش های مرتبط با آن منبع وجود دارد. به عنوان مثال، سرویس Usage API دارای شش روش مرتبط با منبع services
است: get
, enable
, disable
, batchGet
, batchEnable
و list
.
طرحواره ها به شما می گویند که منابع موجود در یک API چگونه هستند. هر سند Discovery یک بخش schemas
سطح بالایی دارد که شامل یک جفت نام/مقدار از شناسه طرحواره برای شیء است. شناسههای طرحواره برای هر API منحصربهفرد هستند و برای شناسایی منحصربهفرد طرحواره در بخش methods
سند کشف استفاده میشوند. به عنوان مثال، در اینجا تعدادی از طرحواره های موجود در سند سرویس Usage API Discovery آورده شده است:
"schemas": { "Method": { // JSON schema of the Method resource }, "Authentication": { // JSON schema of the Authentication resource }, "RubySettings": { // JSON schema of the RubySettings resource }, "EnableServiceResponse": { // JSON schema of the EnableServiceResponse resource } }
APIs Discovery Service از JSON Schema draft-03 برای نمایش طرحواره خود استفاده می کند. در زیر قطعه ای از طرحواره JSON برای منبع EnableServiceResponse
به همراه GoogleApiServiceusagev1Service
است که به آن ارجاع می دهد. در کنار این طرحواره ها، بخشی از یک پاسخ واقعی برای درخواست فعال کردن Pub/Sub API ( pubsub.googleapis.com
) وجود دارد.
طرحواره JSON منبع EnableServiceResponse : | پاسخ واقعی برای فعال کردن یک سرویس: |
"EnableServiceResponse": { "id": "EnableServiceResponse", "description": "Response message for the `EnableService` method. This response message is assigned to the `response` field of the returned Operation when that operation is done.", "properties": { "service": { "description": "The new state of the service after enabling.", "$ref": "GoogleApiServiceusageV1Service" } }, "type": "object" }, "GoogleApiServiceusageV1Service": { "description": "A service that is available for use by the consumer.", "properties": { "config": { "$ref": "GoogleApiServiceusageV1ServiceConfig", "description": "The service configuration of the available service. Some fields may be filtered out of the configuration in responses to the `ListServices` method. These fields are present only in responses to the `GetService` method." }, "name": { "type": "string", "description": "The resource name of the consumer and service. A valid name would be: - projects/123/services/serviceusage.googleapis.com" }, " | "response": { "@type": "type.googleapis.com/google.api.serviceusage.v1.EnableServiceResponse", "service": { "name": "projects/232342569935/services/pubsub.googleapis.com", "config": { "name": "pubsub.googleapis.com", "title": "Cloud Pub/Sub API", "documentation": { "summary": "Provides reliable, many-to-many, asynchronous messaging between applications.\n" }, "quota": {}, "authentication": {}, "usage": { "requirements": [ "serviceusage.googleapis.com/tos/cloud" ] }, "monitoring": {} }, " |
فیلدهای پررنگ نگاشت بین طرحواره JSON و پاسخ واقعی را نشان می دهند.
همانطور که در این مثال نشان داده شده است، طرحواره ها می توانند ارجاعاتی به طرحواره های دیگر داشته باشند. اگر در حال ساختن یک کتابخانه کلاینت هستید، این می تواند به شما کمک کند تا به طور موثر اشیاء یک API را در کلاس های مدل داده خود مدل سازی کنید. در مثال EnableServiceResponse
در بالا، ویژگی service
ارجاع به طرحی با شناسه GoogleApiServiceusageV1Service
است، طرحی دیگر در سند سرویس Usage API Discovery. می توانید ویژگی GoogleApiServiceusageV1Service
در منبع EnableServiceResponse
با مقدار طرحواره GoogleApiServiceusageV1Service
جایگزین کنید (توجه داشته باشید که دستور $ref
از مشخصات طرحواره JSON می آید).
روشها همچنین ممکن است به طرحوارهها هنگام نشان دادن درخواست و پاسخدهی خود ارجاع دهند. برای جزئیات بیشتر به بخش روش ها مراجعه کنید.
روش ها
هسته سند Discovery حول روش ها ساخته شده است. متدها عملیاتی هستند که می توان روی یک API انجام داد. بخش methods
در بخشهای مختلف سند Discovery، از جمله در سطح بالا (که ما روشهای سطح API مینامیم) یا در سطح resources
، پیدا خواهید کرد.
"methods": { // API-level methods } "resources": { "resource1": { "methods": { // resource-level methods } "resources": { "nestedResource": { "methods": { // methods can even be found in nested-resources } } } } }
در حالی که یک API می تواند متدهای سطح API داشته باشد، یک منبع باید دارای بخش methods
باشد.
هر بخش methods
یک نقشه کلید-مقدار از نام روش تا سایر جزئیات مربوط به آن روش است. مثال زیر سه روش get
، enable
و disable
مستند می کند:
"methods": { "get": { //details about the "get" method }, "enable": { //details about the "enable" method }, "disable": { //details about the "disable" method } }
در نهایت، بخش هر روش به جزئیات خواص مختلف آن روش میپردازد. در اینجا یک مثال از روش enable
آورده شده است:
"enable": { "path": "v1/{+name}:enable", "request": { "$ref": "EnableServiceRequest" }, "parameterOrder": [ "name" ], "id": "serviceusage.services.enable", "response": { "$ref": "Operation" }, "description": "Enable a service so that it can be used with a project.", "httpMethod": "POST", "flatPath": "v1/{v1Id}/{v1Id1}/services/{servicesId}:enable", "scopes": [ "https://www.googleapis.com/auth/cloud-platform", "https://www.googleapis.com/auth/service.management" ], "parameters": { "name": { "location": "path", "description": "Name of the consumer and service to enable the service on. The `EnableService` and `DisableService` methods currently only support projects. Enabling a service requires that the service is public or is shared with the user enabling the service. An example name would be: `projects/123/services/serviceusage.googleapis.com` where `123` is the project number.", "required": true, "type": "string", "pattern": "^[^/]+/[^/]+/services/[^/]+$" } } },
این بخش شامل جزئیات کلی روش مانند ID
منحصر به فرد برای شناسایی متد، httpMethod
برای استفاده، و path
متد است (برای جزئیات نحوه استفاده از ویژگی path
برای محاسبه آدرس کامل متد، به بخش Compose a request مراجعه کنید). علاوه بر این ویژگیهای متد کلی، چند ویژگی وجود دارد که متد را با بخشهای دیگر در سند Discovery مرتبط میکند:
محدوده ها
بخش auth
که قبلاً در این مستندات تعریف شده است حاوی اطلاعاتی در مورد تمام حوزه های پشتیبانی شده توسط یک API خاص است. اگر متدی از یکی از این حوزه ها پشتیبانی کند، دارای یک آرایه scopes خواهد بود. یک ورودی در این آرایه برای هر محدوده پشتیبانی شده توسط متد وجود دارد.
توجه داشته باشید که انتخاب یک auth scope برای استفاده در برنامه شما به عوامل مختلفی بستگی دارد، از جمله اینکه کدام متدها فراخوانی می شوند و چه پارامترهایی همراه با متد ارسال می شوند. بنابراین، تصمیم گیری در مورد اینکه از کدام محدوده استفاده شود به توسعه دهنده واگذار می شود. اکتشاف فقط اسنادی را مستند می کند که دامنه برای یک روش معتبر است.
درخواست و پاسخ
اگر روش دارای بدنه درخواست یا پاسخ باشد، این موارد به ترتیب در بخش request
یا response
مستند می شوند. برای مثال، برای متد enable
، محتوای بخش request
نشان میدهد که درخواست روش توسط یک طرح JSON با شناسه EnableServiceRequest
تعریف شده است. این طرح را می توان در بخش طرحواره های سطح بالا یافت.
پارامترها
اگر روشی دارای پارامترهایی باشد که باید توسط کاربر مشخص شود، این پارامترها در قسمت parameters
سطح روش ثبت می شوند. این بخش حاوی نگاشت کلید/مقدار نام پارامتر به جزئیات بیشتر در مورد آن پارامتر است.
برای مثال، یک پارامتر برای متد enable
وجود دارد: name
. پارامترها می توانند در path
یا query
URL قرار گیرند. ویژگی location
نشان می دهد که کتابخانه مشتری باید این پارامتر را در کجا قرار دهد.
بسیاری از ویژگیهای دیگر پارامتر را توصیف میکنند، از جمله type
دادههای پارامتر (مفید برای زبانهایی با تایپ قوی)، اینکه آیا پارامتر required
است یا خیر، و اینکه آیا پارامتر یک عدد است یا خیر. برای جزئیات بیشتر در مورد این ویژگی ها به مستندات مرجع این API مراجعه کنید.
ترتیب پارامترها
راههای زیادی برای ساختاربندی رابطهای کتابخانههای مشتری وجود دارد. یک راه این است که یک متد با هر پارامتر API در امضای متد داشته باشید. با این حال، از آنجایی که JSON یک فرمت نامرتب است، دانستن اینکه چگونه پارامترها را در امضای متد مرتب کنید از نظر برنامهنویسی دشوار است. آرایه parameterOrder
ترتیب پارامترهای ثابتی را برای درخواست ارائه می دهد. آرایه نام هر پارامتر را به ترتیب اهمیت فهرست می کند. می تواند شامل پارامترهای مسیر یا پرس و جو باشد، اما هر پارامتر در آرایه مورد نیاز است.
بارگذاری رسانه
اگر روشی از آپلود رسانه مانند تصاویر، صدا یا ویدیو پشتیبانی می کند، مکان و پروتکل های پشتیبانی شده برای آپلود آن رسانه در بخش mediaUpload
مستند می شوند. این بخش شامل جزئیاتی در مورد اینکه کدام پروتکل های آپلود پشتیبانی می شوند و اطلاعاتی در مورد نوع رسانه ای که می توان آپلود کرد، می باشد.
روش enable
شامل بخش mediaUpload
نیست. با این حال، یک بخش mediaUpload
معمولی ممکن است به شکل زیر باشد:
"supportsMediaUpload": true, "mediaUpload": { "accept": [ "image/*" ], "maxSize": "10MB", "protocols": { "simple": { "multipart": true, "path": "/upload/storage/v1beta1/b/{bucket}/o" }, "resumable": { "multipart": true, "path": "/resumable/upload/storage/v1beta1/b/{bucket}/o" } } }
در مثال بالا، ویژگی supportsMediaUpload
یک مقدار بولی است که تعیین می کند آیا روش از آپلود رسانه پشتیبانی می کند یا خیر. اگر مقدار درست باشد، بخش mediaUpload
انواع رسانههای قابل آپلود را مستند میکند.
ویژگی accept
فهرستی از محدودههای رسانه است که تعیین میکند کدام نوع mime برای آپلود قابل قبول است. نقطه پایانی نشان داده شده در مثال بالا هر فرمت تصویری را می پذیرد.
ویژگی maxSize
حداکثر اندازه یک آپلود را دارد. مقدار یک رشته در واحدهای مگابایت، گیگابایت یا ترابایت است. در مثال بالا، آپلودها به حداکثر اندازه 10 مگابایت محدود شده است. توجه داشته باشید که این مقدار سهمیه ذخیرهسازی باقیمانده یک کاربر را برای آن API منعکس نمیکند، بنابراین حتی اگر آپلود کمتر از maxSize
باشد، کتابخانه سرویس گیرنده همچنان باید برای رسیدگی به آپلودی که به دلیل فضای ناکافی ناموفق است، آماده باشد.
بخش protocols
پروتکلهای آپلود را که یک روش پشتیبانی میکند فهرست میکند. پروتکل simple
به سادگی ارسال رسانه به نقطه پایانی داده شده در یک درخواست HTTP است. پروتکل resumable
به این معنی است که نقطه پایانی داده شده در path
URI از پروتکل بارگذاری مجدد پشتیبانی می کند. اگر ویژگی multipart
true
باشد، نقطه پایانی بارگذاریهای چند قسمتی را میپذیرد، به این معنی که هم درخواست JSON و هم رسانه میتوانند در یک بدنه چندپارتی/مرتبط با هم پیچیده شوند و با هم ارسال شوند. توجه داشته باشید که هر دو پروتکل simple
و resumable
ممکن است از آپلود چند قسمتی پشتیبانی کنند.
ویژگی path
یک الگوی URI است و باید مانند ویژگی path
برای متد، همانطور که در بخش Compose a request توضیح داده شده است، گسترش یابد.
دانلود رسانه
اگر روشی از بارگیری رسانه مانند تصاویر، صدا یا ویدیو پشتیبانی می کند، با پارامتر supportsMediaDownload
نشان داده می شود:
"supportsMediaDownload": true,
هنگام دانلود رسانه باید پارامتر alt
query را در URL درخواست روی media
تنظیم کنید.
اگر ویژگی useMediaDownloadService
متد API true
است، برای جلوگیری از تغییر مسیر، /download
قبل از servicePath
وارد کنید. برای مثال، مسیر دانلود /download/youtube/v3/captions/{id}
است اگر الحاق servicePath
و path
/youtube/v3/captions/{id}
باشد. توصیه می شود حتی زمانی که useMediaDownloadService
نادرست است، URL دانلود رسانه را با /download
بسازید.
پارامترهای رایج
سند کشف سطح بالا حاوی یک ویژگی parameters
است. این بخش مشابه بخش پارامترهای هر متد است، اما این پارامترها را می توان برای هر روشی در API اعمال کرد.
به عنوان مثال، متدهای get
و list
از سرویس Usage API میتوانند یک پارامتر prettyPrint
در پارامترهای درخواست داشته باشند، که پاسخ همه آن متدها را در قالبی قابل خواندن برای انسان قالببندی میکند. در اینجا لیستی از پارامترهای رایج آمده است:
پارامتر | معنی | یادداشت ها | قابلیت کاربرد |
---|---|---|---|
access_token | نشانه OAuth 2.0 برای کاربر فعلی. |
| |
alt | قالب داده برای پاسخ. |
|
|
callback | عملکرد برگشت به تماس |
| |
fields | انتخابگر که زیر مجموعه ای از فیلدها را برای درج در پاسخ مشخص می کند. |
| |
key | کلید API. (الزامی) |
| |
prettyPrint | پاسخ را با شناسه ها و شکستگی ها برمی گرداند. |
| |
quotaUser | جایگزین userIp . |
| |
userIp | آدرس IP کاربر نهایی که تماس API برای او انجام می شود. |
|
اسناد درون خطی
هر سند Discovery با تعدادی فیلد description
حاشیه نویسی می شود که اسناد درون خطی را برای API ارائه می کند. فیلدهای description
را می توان برای عناصر API زیر یافت:
- خود API
- دامنه های OAuth
- طرحواره های منابع
- روش های API
- پارامترهای روش
- مقادیر قابل قبول برای پارامترهای خاص
این فیلدها مخصوصاً در صورتی مفید هستند که میخواهید از سرویس Google APIs Discovery برای تولید اسناد قابل خواندن توسط انسان برای یک کتابخانه مشتری استفاده کنید - به عنوان مثال، JavaDoc.