Google Cloud Platform Japan Blog
最新情報や使い方、チュートリアル、国内外の事例やイベントについてお伝えします。
Google における API のバージョニング
2017年7月6日木曜日
API のバージョニングは簡単ではありません。いろいろな方法があり、API の世界の人なら誰でも持論をお持ちでしょう。バージョニングを避けることもほとんど不可能です。開発チームが仕事を進めると、機能を廃止(または、その機能を別の形で提供)する必要が生じることがあります。バージョニングを導入すれば、API のユーザーは API のセマンティクスの変化を確実に把握できるようになります。
複数のバージョンを設けないようにする会社もありますが、Google にはそのような余裕はありません。Google の API の数、API を開発しているチームの数、API を使っている開発者の数があまりにも多いので、どのような機能が API に期待されているのか、それを知るための手段として私たちは API をバージョニングしています。
API のバージョニングには一貫性のある包括的なポリシーが必要です。Google では
セマンティック バージョニング
の一般原則に従って API にバージョンを付けています。この原則は単純で、各リリースにはメジャー バージョンの X とマイナー バージョンの Y という 2 つの数字を与えます。マイナー バージョンが変わっても下位互換性は失われませんが、メジャー バージョンが変わると下位互換性が失われます。
Google のメジャー バージョンは API のパスに反映され、ドメインのすぐ後ろに組み込まれます。こうすれば、同じ API URL を呼び出す限り、返されるフィールドが消えたり名前が変わったりしないことが保証されます。たとえば、
coolcloudapi.googleapis.com/v1/coolthings/12301221312132
に対して GET 命令を送ったとき、返される JSON のフィールドは消えたり名前が変わったりしません。
もちろん、この方法には長所と短所があります。現在も、多くの優秀な人々が「正しい」バージョニングに関して議論を戦わせています。バージョンの指定にはヘッダを使うべきだという人もいれば、API コンシューマーが使い慣れたバージョンを堅持すべきだという人もいます。
こうした意見を私たちはすべて検討し、バージョニングの広範な目的に照らし合わせたうえで、URL にメジャー バージョンを組み込むことがほとんどのケースで最も効果的だという結論に達しました。
URL にマイナー バージョンが含まれていないことに注意してください。そのため、私たちが Cool Cloud API に新フィールドを追加しても URL は変わらず、
coolcloudapi.googleapis.com/v1/coolthings/12301221312132
を呼び出すとある日突然新しいデータが返されるようになり、ユーザーに驚かれることがあります。しかし、私たちがフィールドを削除してもアプリケーションが「壊れる」ことは決してありません。
私たちが新しいメジャー バージョンをリリースするときは、通常は両方のバージョンを処理できる単一のバックエンドを作ります。バージョンの違いにかかわらず、すべての要求はこのバックエンドに送られます。バックエンドは、パス内のバージョンを使ってどちらを返すかを判断します。
私たちは、Google の API ゲートウェイである
Cloud Endpoints
のお客様を対象に、上記と同じバージョニングの方法を使用できるようにしました。
まず第 1 に、私たちのプロキシは、お客様の API の複数のバージョンに対応し、API バージョンを返すようになります。これを使えば、API のどのバージョンにどれだけのトラフィックが集まるかがわかります。新バージョンに移行した API へのトラフィックがどれだけあるかが把握できるわけです。
第 2 に、これを利用すれば、古いバージョンを使っているユーザーを特定し、それを基に API を非推奨や廃止に導くことができます。このテーマについては後日改めてブログで取り上げるつもりです。
バージョニングは、より良い API を作るという薔薇のとげのようなものです。私たちは社内で採用したアプローチに自信を持っており、コミュニティとともに作り上げたベスト プラクティスをシェアしたいと思っています。
Cloud Endpoints をぜひ使ってみてください。詳細は、
10-minute-quickstart
もしくは
in-depth tutorials
をご覧いただくか、私たちの Google グループ google-cloud-endpoints@googlegroups.com にご連絡ください。
* この投稿は米国時間 6 月 26 日、Product Manager である Dan Ciruli によって投稿されたもの(投稿は
こちら
)の抄訳です。
- By Dan Ciruli, Product Manager
0 件のコメント :
コメントを投稿
12 か月間のトライアル
300 ドル相当が無料になるトライアルで、あらゆる GCP プロダクトをお試しいただけます。
Labels
.NET
.NET Core
.NET Core ランタイム
.NET Foundation
Access Management
AlphaGo
Ansible
Anvato
Apache Beam
Apache Maven
API
Apigee
APIs Explore
App Engine
App Engine Flex
App Engine flexible
AppArmor
AppScale
AprilFool
AR
Artifactory
ASP.NET
ASP.NET Core
Attunity
AWS
Big Data
BigQuery
Billing Alerts
Bime by Zendesk
Bitbucket
Borg
BOSH Google CPI
Bower
BreezoMeter
BYOSL
Capacitor
Chromium OS
Client Libraries
Cloud API
Cloud Audit Logging
Cloud Bigtable
Cloud CDN
Cloud Client Libraries
Cloud Console
Cloud Consoleアプリ
Cloud Container Builder
Cloud Dataflow
Cloud Dataflow SDK
Cloud Datalab
Cloud Dataprep
Cloud Dataproc
Cloud Datastore
Cloud Debugger
Cloud Deployment Manager
Cloud Endpoints
Cloud Foundry
Cloud Foundry Foundation
Cloud Functions
Cloud IAM
Cloud IAP
Cloud Identity
Cloud Jobs API
Cloud KMS
Cloud Launcher
Cloud Load Balancing
Cloud Machine Learning
Cloud monitoring
Cloud Natural Language API
Cloud Networking
cloud Pub/Sub
Cloud Resource Manager
Cloud Resource Manager API
Cloud SDK
Cloud SDK for Windows
Cloud Source Repositories
Cloud Spanner
Cloud Speech API
Cloud SQL
Cloud Storage
Cloud Storage FUSE
Cloud Tools for PowerShell
Cloud Tools PowerShell
Cloud Translation
Cloud Translation API
Cloud Virtual Network
Cloud Vision
CloudBerry Backup
CloudBerry Lab
CloudEndure
Cloudian
CloudML
Cluster Federation
Codefresh
Codelabs
Cohesity
Coldline
Colossus
Compute Engine
Compute user Accounts
Container Engine
Container Registry
Container-Optimized OS
Container-VM Image
CRE
CSEK
Customer Reliability Engineering
Data Studio
Dbvisit
DDoS
Debugger
deep learning
Deployment Manager
Developer Console
Developers
DevOps
Disney
Docker
Dockerfile
Drain
Dreamel
Eclipse
Eclipse Orion
Education Grants
Elasticsearch
Energy Sciences Network
Error Reporting
ESNet
Evernote
FASTER
Fastly
Firebase
Firebase Analytics
Firebase Authentication
Flexible Environment
G Suite
gcloud
GCP 移行ガイド
gcsfuse
GitHub
Go
Go 言語
Google App Engine
Google Apps
Google Certified Professional - Data Engineer
Google Cloud
Google Cloud Certification Program
Google Cloud Client Libraries
Google Cloud Console
Google Cloud Dataflow
Google Cloud Datalab
Google Cloud Datastore
Google Cloud Endpoints
Google Cloud Explorer
Google Cloud Identity and Access Management
Google Cloud Launcher
Google Cloud Logging
Google Cloud Platform
Google Cloud Resource Manager
Google Cloud Security Scanner
Google Cloud Shell
Google Cloud SQL
Google Cloud Storage
Google Cloud Storage Nearline
Google Cloud Tools for IntelliJ
Google Code
Google Compute Engine
Google Container Engine
Google Data Analytics
Google Data Studio
Google Date Studio
Google Deployment Manager
Google Drive
Google Earth Engine
Google Genomics
Google Maps APIs
Google SafeSearch
Google Service Control
Google Sheets
Google Slides
Google Translate
Google 公認プロフェッショナル
GPU
Gradle
GroupBy
gRPC
HA / DR
Haskell
HEPCloud
HIPAA
Horizon
HTCondor
IaaS
IAM
IBM
IBM POWER9
icon
IERS
Improbable
InShorts
Intel
IntelliJ
Internal Load Balancing
Internet2
IoT
Issue Tracker
Java
JFrog
JFrog Artifactory SaaS
Jupiter
Jupyter
Khan Academy
Komprise
kubefed
Kubernetes
KVM
Landsat
load shedding
Logging
Looker
Machine Learning
Magenta
Managed Instance Group
Maps API
Maven
Maxon Cinema 4D
MightyTV
Mission Control
MongoDB
MQTT
MySQL
Nearline
Network Time Protocol
neural networks
Next
Node
NoSQL
NTP
NuGet パッケージ
OCP
OLDISM
Open Compute Project
OpenCAPI
OpenCAPI Consortium
OpenShift Dedicated
Orbitera
Organization
Orion
Panda
Particle
Percona
Pete's Dragon
Pivotal
Pivotal Cloud Foundry
PLCN
Pokemon GO
Pokémon GO
Poseidon
Postgre
PowerPoint
PowerShell
Protocol Buffers
Puppet
Pythian
Python
Rails
Raspberry Pi
Red Hat
Regional Managed Instance Groups
Ruby
Rust
SC16
ScaleArc
Security & Identity
Sentinel-2
Serving Websites
Shared VPC
SideFX Houdini
SIGOPS Hall of Fame Award
Sinatra
Site Reliability Engineering
SLA
Slack
SLI
SLO
Snap
Spaceknow
SpatialOS
Spinnaker
Spring
SQL Server
SRE
Stack Overflow
Stackdriver
Stackdriver Agent
Stackdriver Debugger
Stackdriver Diagnostics
Stackdriver Error Reporting
Stackdriver Logging
Stackdriver Monitoring
Stackdriver Trace
Stanford
Startups
StatefulSets
Storage & Databases
StorReduce
Streak
Sureline
Sysbench
Tableau
Talend
Tensor Flow
Tensor Processing Unit
TensorFlow
Terraform
The Carousel
TPU
Trace
Transfer Service
Translate API
Uber
Veritas
Video Intelligence API
Vision API
Visual Studio
Visualization
Vitess
VM
VM Image
VR
VSS
Waze
Webyog
Wide and Deep
Windows Server
Windows ワークロード
Wix
Worlds Adrift
Xplenty
Yellowfin
YouTube
Zaius
Zaius P9 Server
Zipkin
ZYNC Render
アーキテクチャ図
イベント
エンティティ
オンライン教育
クラウド アーキテクト
コードラボ
コンテスト
コンピューティング
サポート
ジッター
ショート動画シリーズ
スタートガイド
ストレージ
セミナー
ソリューション ガイド
ソリューション: メディア
データ エンジニア
データセンター
ビッグデータ
ファジング
プリエンプティブル VM
フルマネージド
マイクロサービス
マルチクラウド
リージョン
ロード シェディング
運用管理
可用性
海底ケーブル
機械学習
月刊ニュース
資格、認定
新機能、アップデート
人気記事ランキング
導入事例
内部負荷分散
認定試験
料金
Archive
2017
7
6
5
4
3
2
1
2016
12
11
10
9
8
7
6
5
4
3
2
1
2015
12
11
10
9
8
7
6
5
4
3
2
1
2014
12
11
10
9
8
6
5
4
3
2
Feed
月刊ニュースレターに
登録
新着ポストをメールで受け取る
Google
on
Follow @GoogleCloud_jp
0 件のコメント :
コメントを投稿