Saat ini, Cloud Endpoints hanya menerima Spesifikasi OpenAPI versi 2.
Bagian di bawah ini menjelaskan batasan fitur OpenAPI di Endpoint.
Cakupan diabaikan
Meskipun Endpoint menerima dokumen OpenAPI dengan cakupan yang ditetapkan dalam objek skema keamanan, saat permintaan dikirim ke API Anda, Extensible Service Proxy (ESP) maupun Cloud Endpoints Frameworks tidak akan memeriksa cakupan yang ditentukan.
Berbagai persyaratan keamanan
Anda dapat menetapkan lebih dari satu persyaratan keamanan dalam dokumen OpenAPI. Bagian ini menjelaskan skema keamanan yang didukung ESP.
Persyaratan keamanan yang berisi kunci API
ESP tidak mendukung persyaratan keamanan alternatif (OR) jika salah satu skema keamanan berupa kunci API. Misalnya, ESP tidak mendukung daftar persyaratan keamanan berikut:
security:
- petstore_auth: []
- api_key: []
Definisi ini memerlukan operasi untuk menerima permintaan yang mengikuti persyaratan petstore_auth
atau persyaratan api_key
.
Namun, perlu diperhatikan bahwa ESP mendukung konjungsi persyaratan keamanan (AND logis), sehingga Anda dapat mewajibkan kunci API dan autentikasi OAuth2. Misalnya, daftar persyaratan keamanan berikut didukung:
security:
- petstore_auth: []
api_key: []
Definisi ini memerlukan operasi untuk menerima permintaan yang secara bersamaan mengikuti persyaratan petstore_auth
dan persyaratan api_key
.
Persyaratan keamanan untuk OAuth2
ESP mendukung persyaratan keamanan alternatif keamanan (OR logis), tetapi hanya untuk skema keamanan autentikasi OAuth2. Misalnya, daftar persyaratan keamanan berikut telah didukung:
security:
- firebase1: []
- firebase2: []
Validasi definisi keamanan
ESP tidak memvalidasi bahwa semua persyaratan keamanan (baik
pada level API maupun level metode) juga terdapat di
bagian securityDefinitions
. Akibatnya, jika spesifikasi API menggunakan skema keamanan yang tidak ditentukan, permintaan yang tidak diautentikasi dapat masuk melalui API, pada level tempat kunci keamanan yang tidak ditentukan dikonfigurasi. Pastikan semua kunci keamanan yang digunakan oleh API Anda dan metodenya telah didefinisikan berdasarkan definisi keamanan dalam dokumen OpenAPI Anda.
Template jalur URL
Endpoint hanya mendukung parameter template jalur URL yang sesuai dengan seluruh segmen jalur (dipisahkan dengan garis miring /
). Parameter template jalur URL yang sesuai dengan segmen jalur parsial tidak didukung.
Misalnya, template jalur URL berikut didukung:
/items/{itemId}
/items/{itemId}/subitems
Template jalur URL berikut tidak didukung dan akan ditolak:
/items/overview.{format}
/items/prefix_{id}_suffix
Operasi pada jalur root URL /
Endpoint menerima dokumen OpenAPI yang mencakup operasi di
jalur root /
. Namun, permintaan pada jalur root ditolak oleh
ESP. Perhatikan bahwa batasan ini hanya untuk ESP,
ESPv2 mendukung jalur root /
.
Misalnya, cuplikan dokumen OpenAPI berikut diterima:
paths:
/:
post:
operationId: "root"
responses:
200:
description: "Success"
schema:
type: string
Namun, permintaan berikutnya untuk POST /
ditolak dengan error berikut:
{
"code": 5,
"details": [
{
"@type": "type.googleapis.com/google.rpc.DebugInfo",
"detail": "service_control",
"stackEntries": []
}
],
"message": "Method does not exist."
}
Upload file
Endpoint tidak menerima type: file
untuk parameter upload file, type: string
harus digunakan sebagai gantinya.
Misalnya, cuplikan type: file
berikut tidak diizinkan:
paths:
/upload:
post:
summary: Uploads a file.
consumes:
- multipart/form-data
parameters:
- in: formData
name: upfile
type: file
description: The file to upload.
Sedangkan hal berikut dengan type: string
diizinkan:
paths:
/upload:
post:
summary: Uploads a file.
consumes:
- multipart/form-data
parameters:
- in: formData
name: upfile
type: string
description: The file to upload.
Parameter, skema, dan jenis
ESP mengabaikan sebagian besar definisi parameter dan jenis.
Endpoint menerima dokumen OpenAPI yang menyertakan definisi parameter dan jenis yang diperlukan, tetapi ESP tidak menerapkan definisi ini dan meneruskan permintaan yang masuk ke API Anda. Berikut adalah daftar sebagian yang memberikan contoh definisi yang tidak diterapkan oleh ESP:
- Parameter Data Formulir, seperti:
parameters: - name: avatar in: formData description: "The avatar of the user" type: string
- Parameter yang diperlukan, seperti:
parameters: - name: message in: query description: "Message to send" required: true type: string
- Format koleksi array, seperti:
parameters: - name: items in: query description: "List of item IDs" required: true type: array items: type: string collectionFormat: tsv
- Komposisi jenis, seperti:
definitions: base: properties: message: type: string extended: description: "Extends the base type" allOf: - $ref: "#/definitions/base" - type: object properties: extension: type: string
- Objek respons yang berbeda per kode status, seperti:
responses: 200: description: "Echo" schema: $ref: "#/definitions/EchoResponse" 400: description: "Error" schema: type: string
Referensi jenis eksternal
Endpoint tidak mendukung referensi ke jenis di luar dokumen OpenAPI. Misalnya, Endpoint menolak dokumen OpenAPI yang mencakup:
parameters:
- name: user
description: User details
in: body
schema:
$ref: "https://example.com/mytype.json"
Port kustom di alamat host layanan
Endpoint tidak mengizinkan port kustom di kolom host
dalam dokumen OpenAPI. Misalnya, Endpoint menolak dokumen OpenAPI seperti:
swagger: 2.0
host: example.com:8080
schemes:
- http
Batasan alias YAML
Endpoint dapat mendukung hingga 200 node alias YAML dalam dokumen OpenAPI. Jika ada lebih dari 200 alias YAML dalam dokumen OpenAPI, sebaiknya batalkan referensi alias jika memungkinkan untuk mematuhi batasan ini.
Bug yang diketahui
Dokumen OpenAPI ditolak
Saat Anda men-deploy dokumen OpenAPI menggunakan gcloud endpoints services deploy
, Endpoint akan menolak dokumen OpenAPI yang menyertakan:
- Parameter isi array, seperti:
parameters: - name: message description: "Message to echo" in: body schema: type: array items: type: string
- Jalur dengan garis miring di akhir, misalnya:
paths: "/echo/": post: description: "Echo back a given message."
Untuk memperbaiki masalah ini, hapus garis miring dari
/echo/
:paths: "/echo": post: description: "Echo back a given message."
Batasan definisi kunci API
Saat menentukan kunci API dalam objek definisi keamanan di dokumen OpenAPI, Endpoint memerlukan salah satu skema berikut:
name
adalahkey
danin
adalahquery
name
adalahapi_key
danin
adalahquery
name
adalahx-api-key
danin
adalahheader
Contoh:
"securityDefinitions": {
"api_key_0": {
"type": "apiKey",
"name": "key",
"in": "query"
},
"api_key_1": {
"type": "apiKey",
"name": "api_key",
"in": "query"
}
"api_key_2": {
"type": "apiKey",
"name": "x-api-key",
"in": "header"
},
}
Saat Anda men-deploy dokumen OpenAPI dengan jenis definisi keamanan kunci API lainnya, Endpoint mungkin menerimanya dan menampilkan peringatan. Namun, definisi keamanan kunci API akan diabaikan dalam permintaan masuk.
Portal Cloud Endpoints tidak merender jenis komposisi
Meskipun Endpoint menerima dokumen OpenAPI dengan jenis
komposisi, yaitu jenis dengan allOf
dalam definisi,
Portal Endpoint tidak membuat dokumentasi untuk
jenis komposisi.