API
関数は、サービスのグローバルプロパティを定義するトップレベルのDSLです。デザインの
ルートとして機能し、他のすべてのコンポーネントの基礎を確立します。各デザインパッケージ
には1つのAPI宣言のみを含めることができ、これがサービス定義のエントリーポイントとして
機能します。
API定義は以下の重要な目的を果たします:
以下は最小限のAPI定義です:
var _ = API("calculator", func() {
Title("電卓API")
Description("シンプルな電卓サービス")
Version("1.0.0")
})
これは"calculator"という名前のAPIを基本的なドキュメントと共に作成します。API名は 生成されるコードで使用されるため、有効なGo識別子である必要があります。
以下は、利用可能なすべてのAPIオプションを詳細な説明付きで示す包括的な例です:
var _ = API("bookstore", func() {
// 基本的なAPI情報 - OpenAPIドキュメントで使用
Title("書店API")
Description(`現代的な書店管理API。
このAPIは以下のエンドポイントを提供します:
- 書籍と在庫の管理
- 注文の処理
- 顧客管理
- 分析とレポート`)
Version("2.0.0")
// サービス利用規約 - 法的要件と使用条件
TermsOfService("https://example.com/terms")
// 連絡先情報 - サポートの問い合わせ先
Contact(func() {
Name("APIサポート")
Email("[email protected]")
URL("https://example.com/support")
})
// ライセンス情報 - APIの使用方法
License(func() {
Name("Apache 2.0")
URL("https://www.apache.org/licenses/LICENSE-2.0.html")
})
// ドキュメント - 詳細なガイドとリファレンス
Docs(func() {
Description(`包括的なAPIドキュメントには以下が含まれます:
- 入門ガイド
- 認証の詳細
- APIリファレンス
- ベストプラクティス
- サンプルコード`)
URL("https://example.com/docs")
})
// サーバー定義 - APIにアクセスできる場所
Server("production", func() {
Description("本番サーバー")
// 変数を持つ複数のホスト
Host("production", func() {
Description("本番ホスト")
// URI内の変数は実行時に置き換えられます
URI("https://{version}.api.example.com")
URI("grpcs://{version}.grpc.example.com")
// バージョン変数を定義
Variable("version", String, "APIバージョン", func() {
Default("v2")
Enum("v1", "v2")
})
})
})
// テスト用の開発サーバー
Server("development", func() {
Description("開発サーバー")
Host("localhost", func() {
// ローカル開発エンドポイント
URI("http://localhost:8000")
URI("grpc://localhost:8080")
})
})
})
これらのプロパティはAPIのドキュメントと発見に不可欠です:
Title
: APIの短く説明的な名前Description
: APIの機能の詳細な説明Version
: APIバージョン、通常はセマンティックバージョニングに従うTermsOfService
: サービス利用規約へのリンクマークダウンをサポートする例:
Title("注文管理API")
Description(`
# 注文管理API
このAPIでは以下が可能です:
- 注文の作成と管理
- 出荷の追跡
- 返品の処理
- 請求書の生成
## レート制限
- 認証済みユーザーは1時間あたり1000リクエスト
- 匿名ユーザーは1時間あたり100リクエスト
`)
連絡先情報は、APIユーザーがサポートを求める際に役立ちます:
Contact(func() {
Name("APIチーム")
Email("[email protected]")
URL("https://example.com/contact")
})
この情報はAPIドキュメントに表示され、ユーザーが必要な時に支援を得るのに役立ちます。
APIの使用方法を指定します:
License(func() {
Name("MIT")
URL("https://opensource.org/licenses/MIT")
})
ライセンス情報は、ユーザーが使用権と制限を理解するために重要です。
追加のドキュメントリソースを提供します:
Docs(func() {
Description(`詳細なドキュメントには以下が含まれます:
- APIリファレンス
- 統合ガイド
- ベストプラクティス
- サンプルコード`)
URL("https://example.com/docs")
})
サーバーは、APIにアクセスできるエンドポイントを定義します。異なる環境用に複数の サーバーを定義できます:
Server("main", func() {
Description("メインAPIサーバー")
// 本番ホスト
Host("production", func() {
Description("本番エンドポイント")
// HTTPとgRPCの両方をサポート
URI("https://api.example.com")
URI("grpcs://grpc.example.com")
})
// 変数を持つリージョナルホスト
Host("regional", func() {
Description("リージョナルエンドポイント")
URI("https://{region}.api.example.com")
// リージョン変数を定義
Variable("region", String, "地理的リージョン", func() {
Description("APIエンドポイントのAWSリージョン")
Default("us-east")
Enum("us-east", "us-west", "eu-central")
})
})
})
URI内の変数により、柔軟な設定が可能になり、以下のために使用できます:
ドキュメント
バージョニング
サーバー設定
一般的なヒント
API DSLを使用すると、すべてのサービスとメソッドで再利用できるAPIレベルのエラーを 定義できます。これにより、エラー処理の一貫性が促進され、デザインの重複が減少します。