ホームページ >バックエンド開発 >Golang >Beego での API ゲートウェイ管理に Kong を使用する

Beego での API ゲートウェイ管理に Kong を使用する

PHPz
PHPzオリジナル
2023-06-22 17:13:451314ブラウズ

マイクロサービス アーキテクチャの人気に伴い、API ゲートウェイへの注目がますます高まっています。マイクロサービス アーキテクチャの重要なコンポーネントの 1 つである API ゲートウェイは、リクエストの分散、リクエストのルーティング、リクエストのフィルタリングを担当するアプリケーションです。 Kong は、その柔軟性、拡張性、使いやすさにより、多くの企業の間で最も人気のある API ゲートウェイの 1 つとなっています。

Beego は、RESTful API 開発のサポートを提供できる、Go アプリケーションの迅速な開発のためのフレームワークです。この記事では、Beego で API ゲートウェイ管理に Kong を使用する方法を説明します。

  1. Kong のインストール

まず、Kong をインストールする必要があります。 Kong は、Windows、Linux、Docker などのさまざまなプラットフォームで実行できます。ここでは、例として Linux に Kong をインストールします。

yum を使用して Kong をインストールします:

$ echo '[bintray--kong-kong-rpm]
name=bintray--kong-kong-rpm
baseurl=https://kong.bintray.com/kong-community-edition-rpm/centos/$releasever/$basearch/
gpgcheck=0
repo_gpgcheck=0
enabled=1' | sudo tee /etc/yum.repos.d/bintray-kong-kong-rpm.repo
$ sudo yum install -y kong

インストールが完了したら、 kong を実行して Kong サービスを開始します。

  1. API の作成

Beego に API を実装し、Kong に登録して外部からアクセスできる API にします。

Beego での API の実装は比較的簡単なので、ここではあまり紹介しません。 Beego では Kong の Admin API を使用する必要があるため、Kong の公式 Go クライアント kong-go-sdk をインストールする必要があることに注意してください。

$ go get github.com/Kong/go-kong/kong

API を作成する前に、以下に示すように Kong Admin API のクライアント オブジェクトが必要です:

import "github.com/Kong/go-kong/kong"

const KongAdminURL = "http://localhost:8001"

func NewKongClient() (*kong.Client, error) {
    return kong.NewClient(kong.String(KongAdminURL))
}

次に、コードを通じて API を登録できます。以下は簡単な例です:

func RegisterAPI(name, upstreamURL, requestHost, stripPath string) error {
    kongClient, err := NewKongClient()
    if err != nil {
        return fmt.Errorf("create kong client error: %v", err)
    }

    targetURL, err := url.Parse(upstreamURL)
    if err != nil {
        return fmt.Errorf("parse target url error: %v", err)
    }

    api := &kong.API{
        Name:        kong.String(name),
        Uris:        kong.StringSlice("/" + name),
        UpstreamURL: kong.String(targetURL.String()),
        RequestHost: kong.String(requestHost),
        StripUri:    kong.Bool(true),
        StripPath:   kong.Bool(stripPath),
    }

    _, err = kongClient.APIs().Create(kongContext.Background(), api)
    if err != nil {
        return fmt.Errorf("register api to kong error: %v", err)
    }

    return nil
}

上記のコードでは、最初に Kong Admin API のクライアント オブジェクトを作成し、次に kong.API を使用して次のような API オブジェクトを作成します。 API 名、API に対応するアップストリーム URL、要求されたドメイン名、URI 削除を有効にするかどうか、URI トランケーションを有効にするかどうか、およびその他のオプションとして。最後に、Kong Admin API のクライアントを使用して API を作成します。

次に、Kong を構成し、プラグインとルートを追加してリクエストと応答の処理を指定する必要があります。

  1. Kong の構成

Kong は、リクエストとレスポンスに対してより高度な処理を実行できるようにする多くのプラグインをサポートしています。一般的に使用されるプラグインには、rate-limitingkey-authoauth2 などが含まれます。ここでは、rate-limiting プラグインを使用して API のアクセス速度を制限します。

func AddPlugin(apiName string) error {
    kongClient, err := NewKongClient()
    if err != nil {
        return fmt.Errorf("create kong client error: %v", err)
    }

    api, err := kongClient.APIs().Get(kongContext.Background(), &apiName)
    if err != nil {
        return fmt.Errorf("get api error: %v", err)
    }

    plugin := &kong.RateLimiting{
        Name:       kong.String("rate-limiting"),
        ConsumerID: nil,
        Limit:      kong.Int(10),
        Policy:     kong.String("local"),
    }

    _, err = kongClient.Plugins().Create(kongContext.Background(), &kong.Plugin{
        APIID: api.ID,
        Name:  plugin.Name,
        Config: kong.Configuration{
            kong.String("consumer_id"): plugin.ConsumerID,
            kong.String("limit"):       plugin.Limit,
            kong.String("policy"):      plugin.Policy,
        },
    })

    if err != nil {
        return fmt.Errorf("add rate-limiting plugin error: %v", err)
    }

    return nil
}

func AddRoute(apiName string) error {
    kongClient, err := NewKongClient()
    if err != nil {
        return fmt.Errorf("create kong client error: %v", err)
    }

    route := &kong.Route{
        Name:   kong.String(apiName),
        Paths:  kong.StringSlice(fmt.Sprintf("/%s", apiName)),
        StripPath: kong.Bool(true),
        PreserveHost: kong.Bool(false),
        RegexPriority: kong.Int(0),
        Service: &kong.Service{
            ID: kong.String(apiName),
        },
    }

    _, err = kongClient.Routes().Create(kongContext.Background(), route)
    if err != nil {
        return fmt.Errorf("add route error: %v", err)
    }

    return nil
}

上記のコードでは、チェーン呼び出しを使用して Kong のプラグインとルーティングを実装しています。

デモンストレーションの便宜上、電流制限プラグインのみを追加しました。 CreateRateLimiting 関数を実行することにより、Kong ゲートウェイに「rate-limiting」という名前のプラグインを作成し、それを「api-name」という名前の API に適用します。コードでは、10 は同時リクエスト数の制限を表します。

メソッドを実行するときに API の名前を渡す必要があります。まず、API 名を使用してゲートウェイに API を作成する必要があります。 RegisterAPI 関数を呼び出して、Beego アプリケーションに実装した API を Kong ゲートウェイに登録します。

AddPlugin 関数と AddRoute 関数を実行すると、API が Kong ゲートウェイに登録されました。

ここでは、Beego アプリケーションの Kong API ゲートウェイに API を直接登録する方法を使用します。実際、Kong は、構成ファイルまたはその他の方法を使用して、Kong Manager または Kong ダッシュボードを通じて API を登録することもサポートしています。 。ただし、これらの方法では、Kong API ゲートウェイのバックグラウンドで手動で操作する必要があり、面倒で時間がかかります。

最後に、Kong の API ゲートウェイを介して Beego に実装した API にアクセスするだけです。テストには Postman またはその他の REST クライアントを使用できます。

  1. 要約:

この記事では、API の登録、プラグインの追加、ルートの指定など、API ゲートウェイの管理に Kong を使用する方法を紹介しました。 Kong を API ゲートウェイとして使用すると、より柔軟、効率的、安全な API 管理と監視を実現できます。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。