ホームページ > バックエンド開発 > Golang > Go言語を使用してAPIゲートウェイを構築する

Go言語を使用してAPIゲートウェイを構築する

PHPz
リリース: 2023-06-18 09:07:43
オリジナル
1361 人が閲覧しました

マイクロサービス アーキテクチャの人気に伴い、API ゲートウェイはマイクロサービス アーキテクチャの不可欠な部分として企業からの価値がますます高まっています。 APIゲートウェイは主に外部ファサードとして機能し、エントリポイントを提供し、プロトコル変換、分散負荷分散、セキュリティ認証、API管理などの一連の機能を担います。多くのアプリケーション シナリオにおいて、API ゲートウェイは技術レベルで多くの問題を解決するだけでなく、ビジネス レベルでの迅速な反復や柔軟な拡張などの利点も実現します。

この記事では、Go 言語を使用して Kong ベースの API ゲートウェイを構築する方法 (Kong を使用した API とプラグインの管理、Go 言語と Kong API を使用した Kong 構成の操作など) を紹介します。

1. Kong の概要

Kong は、一連の API 管理およびセキュリティ機能を提供し、さまざまな環境で実行できるオープンソース API ゲートウェイです。主に、ロードバランシング、サービスディスカバリ、ルーティング、認証、認可、電流制限、モニタリング、プラグインなどの管理ツールを提供します。 Kong はプロキシ サーバーとして Nginx を使用し、プラグイン メカニズムを使用して HTTP トラフィックにさまざまな高度な機能を追加します。 Kong のプラグインは必要に応じて有効にできるため、Kong はさまざまな特定のビジネス シナリオやニーズに対応できるため、非常に人気があります。

2. Kong を使用して API とプラグインを管理する

  1. Kong のインストール

Kong 公式のインストール ガイドを参照して、さまざまなインストール環境を選択できます。 Webサイト。ここでは例として Ubuntu を示します。

$ echo "deb https://kong.bintray.com/kong-deb `lsb_release -sc` main" | sudo tee -a /etc/apt/sources.list
$ curl -o bintray.key https://bintray.com/user/downloadSubjectPublicKey?username=bintray
$ sudo apt-key add bintray.key
$ sudo apt-get update && sudo apt-get install -y kong
ログイン後にコピー

インストールが成功すると、Kong 構成ファイルが /etc/kong ディレクトリに生成されます。

  1. Kong の開始
$ kong start
ログイン後にコピー
  1. API の管理

Kong の Admin API を使用して API を管理します。

$ curl -i -X POST 
  --url http://localhost:8001/apis/ 
  --data 'name=helloworld' 
  --data 'uris=/hello' 
  --data 'upstream_url=http://example.com/hello'
ログイン後にコピー

上の例では、Admin API を介して helloworld という名前の API を作成し、ルーティング URI は /hello、アップストリーム サーバー アドレスは http://example.com/hello です。 http://localhost :8000/hello にアクセスすると、http://example.com/hello にアクセスできます。

  1. プラグインの管理

Kong を使用すると、プラグインを簡単に追加でき、API の機能をさらに強化できます。

$ curl -i -X POST 
  --url http://localhost:8001/apis/helloworld/plugins/ 
  --data 'name=key-auth'
ログイン後にコピー

上の例では、Admin API を通じて key-auth という名前のプラグインを helloworld API に追加します。このプラグインは、API キーに基づく認証に使用されます。

3. Go 言語と Kong API を使用して Kong 構成を操作する

Admin API を使用して API とプラグインを管理することに加えて、Kong が提供する RESTful API を使用してより詳細な設定を行うこともできます。 -粒度の高いコントロール Kong の内部データ モデルに完全に準拠しており、Admin API よりも便利です。

ここでは Go 言語を使用し、Kong Client SDK と組み合わせて Kong の設定を操作します。

  1. Kong クライアント SDK のインストール
$ go get github.com/Kong/go-kong/kong
ログイン後にコピー
  1. Kong 構成の作成
conf := kong.Configuration{
  KongAdminURL: "http://localhost:8001", // Kong Admin接口地址
  KongURL: "http://localhost:8000", // Kong代理服务地址
}
ログイン後にコピー
  1. API と Route の作成
api := &kong.Api{
  Name: kong.String("helloworld"),
  RequestHost: kong.String("example.com"),
  UpstreamURL: kong.String("http://example.com/hello"),
}

route := &kong.Route{
  Name: kong.String("hello-route"),
  Paths: kong.StringSlice([]string{"/hello"}),
  Methods: kong.StringSlice([]string{"GET"}),
}
ログイン後にコピー

作成後、次のコードを使用してそれらを関連付けることができます:

service, err := kong.CreateServiceWithDefaults(conf, api) // 用默认配置创建Service
if err != nil {
  panic(err)
}

route, err = kong.CreateRouteWithDefaults(conf, route, service)
if err != nil {
  panic(err)
}
ログイン後にコピー

このようにして、helloworld という名前のワールドが作成され、ルーティング URI は /hello、アップストリーム サーバー アドレスはhttp:// example.com/hello、GET リクエストを使用してアクセスされたルート。

  1. プラグインの追加

プラグインの追加も非常に簡単で、ここではユーザー認証用のトークンベースの認証プラグインを追加します。コードは次のとおりです。

plugin := &kong.Plugin{
  Name: kong.String("jwt"),
  Config: kong.Configuration{
    "anonymous": "true",
  },
}
route.Plugins = []*kong.Plugin{plugin}

_, err = kong.UpdateRouteWithDefaults(conf, route, service)
if err != nil {
  panic(err)
}
ログイン後にコピー

ここではプラグイン名を jwt として使用するため、JWT 認証を追加できます。ここでは匿名認証を使用します。

概要

この記事では、Go 言語と Kong クライアント SDK を使用して API ゲートウェイを構築するプロセスを紹介します。 Kong を使用すると、API ゲートウェイを迅速に構築し、API とプラグインを管理し、認証や電流制限などの機能を実装できます。 Kong は、Go 言語と Kong クライアント SDK を使用してさらに制御および管理できます。これらのツールにより、API ゲートウェイのスケーラビリティと管理が向上し、マイクロサービスがビジネスにより適切にサービスを提供できるようになります。

以上がGo言語を使用してAPIゲートウェイを構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート