OpenAPI
- Okunuşu
- opın ey-pi-ay
Kısaca
OpenAPI, HTTP API'lerini bir YAML veya JSON dosyasında tanımlayan açık bir standarttır; insanlar ve araçlar her endpoint'i, parametreyi ve yanıtı anlayabilir.
OpenAPI nedir?
OpenAPI, resmi adıyla OpenAPI Specification (OAS), çoğunlukla REST tarzı olan HTTP API'lerini YAML veya JSON ile yazılmış, makine tarafından okunabilir bir dosyada tanımlamak için kullanılan standart bir biçimdir. Dosya her endpoint'i, desteklediği HTTP metotlarını, parametrelerini, istek gövdelerini, olası yanıtlarını, veri şemalarını ve kimlik doğrulama yöntemlerini listeler. Swagger Specification'dan doğmuştur; bu spesifikasyon 2015'te bir Linux Foundation projesi olan OpenAPI Initiative'e bağışlanmış ve yeniden adlandırılmıştır. Güncel ana sürüm 3'tür.
Tanım yapılandırılmış veri olduğu için araçlar onunla çok şey yapabilir: geliştiricilerin istekleri tarayıcıda deneyebildiği etkileşimli dokümantasyon üretmek, birçok dilde istemci kütüphaneleri ve sunucu kodu üretmek, istekleri ve yanıtları doğrulamak, mock sunucular oluşturmak ve sözleşme testleri (contract tests) çalıştırmak. Ekipler ya önce OpenAPI dosyasını yazıp API'yi ona uygun kurar (design-first), ya da dosyayı koddaki açıklamalardan üretir (code-first).
OpenAPI belgesi bir binanın planı gibidir: inşaatçılar, denetçiler ve elektrikçiler binanın içinde dolaşmadan hepsi aynı çizimden çalışabilir. Herkese açık API'lerde ve dahili mikroservislerde yaygın olarak kullanılır; birçok API gateway da rotaları ve istek doğrulamasını yapılandırmak için OpenAPI dosyalarını içe aktarabilir.
OpenAPI ve Swagger sıklıkla eş anlamlı kullanılır, ancak bugün OpenAPI spesifikasyonun adıdır; Swagger ise onunla çalışan Swagger UI ve Swagger Editor gibi araçlar kümesini ifade eder. OpenAPI ayrıca farklı API stillerini tanımlayan GraphQL şemalarından ve gRPC .proto dosyalarından da farklıdır; AsyncAPI adlı ilgili bir standart ise olay güdümlü, mesaj tabanlı API'leri tanımlar.
Önemli noktalar
- OpenAPI, HTTP API'lerini standart bir YAML veya JSON belgesinde tanımlar.
- Endpoint'leri, parametreleri, istek ve yanıt şemalarını ve kimlik doğrulamayı kapsar.
- Araçlar onu dokümantasyon, istemci SDK'ları, sunucu iskeletleri, mock sunucular ve testler üretmek için kullanır.
- OpenAPI spesifikasyondur; Swagger ise onunla çalışan bir araçlar kümesinin adıdır.
- Design-first ekipler spesifikasyonu koddan önce yazar; code-first ekipler onu koddan üretir.
Örnek
openapi: 3.1.0
info: { title: Users API, version: 1.0.0 }
paths:
/users/{id}:
get:
summary: Get a user by ID
parameters:
- { name: id, in: path, required: true, schema: { type: integer } }
responses:
"200":
description: The user
content:
application/json:
schema: { type: object, properties: { name: { type: string } } }
"404": { description: No user with that ID }Sık sorulan sorular
OpenAPI ile Swagger arasındaki fark nedir?
OpenAPI, HTTP API'lerini tanımlamaya yönelik spesifikasyonun adıdır. Swagger ise spesifikasyonun özgün adıydı ve şimdi OpenAPI dosyalarını okuyan ve düzenleyen Swagger UI ile Swagger Editor gibi araçlar kümesinin adıdır.
OpenAPI yalnızca REST API'leri için midir?
HTTP API'leri için tasarlanmıştır; pratikte bunlar çoğunlukla REST tarzı API'lerdir. GraphQL, gRPC ve mesaj tabanlı API'ler; GraphQL şemaları, Protocol Buffers ve AsyncAPI gibi başka biçimler kullanır.
OpenAPI dosyasını elle mi yazmalıyım, yoksa üretmeli miyim?
İki yaklaşım da yaygındır. Önce yazmak (design-first) ekiplerin kodlamadan önce API üzerinde anlaşmasına yardımcı olur; koddaki açıklamalardan üretmek (code-first) ise dosyayı uygulamayla otomatik olarak senkron tutar.
İlgili sayfalar
- REST APIBackend ve API'ler, s. 38REST API, verileri URL'lerle tanımlanan kaynaklar olarak sunan ve istemcilerin onları standart HTTP metotlarıyla okuyup değiştirmesini sağlayan web API'sidir.
- APIBackend ve API'ler, s. 2API, bir yazılımın başka bir yazılımdan veri ya da işlem talep etmesini sağlayan, belgelenmiş ve öngörülebilir kurallar bütünüdür.
- EndpointBackend ve API'ler, s. 11Endpoint, bir API'nin belirli bir kaynak veya eylem için istek alıp yanıt döndürdüğü, bir HTTP metoduyla birlikte kullanılan belirli bir URL'dir.
- JSONBackend ve API'ler, s. 24JSON, yapılandırılmış veriyi anahtar-değer çiftleri ve listelerle saklayıp aktarmaya yarayan, insanın da makinenin de okuyabildiği hafif bir metin biçimidir.
- YAMLDevOps ve Bulut, s. 52YAML, parantez yerine girinti kullanan, insanın okuyabileceği bir veri biçimidir; DevOps araçlarında ve CI/CD pipeline'larında yapılandırma için yaygındır.
- Sözleşme TestiTest ve Kalite, s. 25Sözleşme testi, iki servisin alıp verdikleri istek ve yanıtlar konusunda anlaşıp anlaşmadığını, ikisini birlikte çalıştırmadan kontrol eden tekniktir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin