ホームページ >バックエンド開発 >Golang >Golang REST API アーキテクチャのエレガントな実装

Golang REST API アーキテクチャのエレガントな実装

Guanhui
Guanhui転載
2020-06-17 17:48:334221ブラウズ

このシリーズでは、製品レベルの REST API TODO リスト、持続可能な拡張アーキテクチャを構築する方法を説明します。ルーティングとコード インターフェイスから始めて、mongo データベースと Badger データ レイヤーを追加します。次に、承認プロトコル層 (OAuth 2.0) です。Golang REST API アーキテクチャのエレガントな実装

このシリーズでは、chi ルーティングを使用します。

ルーティングに標準ライブラリ、Gin、または router-x の代わりに Chi を使用することを選択するのはなぜですか?

実は、何を使用するかは重要ではありません。ルーティングに何を使用する場合でも、このシリーズで説明する概念は役に立ちます。しかし、Chi-router がほとんどの代替手段よりも優れていると私が考える次のような利点があります。 Golang REST API アーキテクチャのエレガントな実装

net/http

標準ライブラリと 100% 互換性があります -- - net/http 互換の http またはミドルウェア pkg
  • は Go エコシステムで使用できます。モジュラー/コンポーザブル API 用に設計 - ミドルウェア、インライン ミドルウェア、ルート グループ、サブルーターのインストール

  • 外部依存関係なし --- 純粋に Go 1.7 stdlib net / http

  • 強力 --- 以下のような多くの企業が使用しています。 Pressly、CloudFlare、Heroku、99Designs

  • 軽量 --- Chi ルーターの場合は約 1000 LOC でクロックされます

  • 高速です

  • 私が最も気に入っている点は、他の net/http 互換ルーター用に作成した古い http ハンドラーとミドルウェアが引き続き正常に動作することです。

    始めましょう
まず、main.go を作成します。プログラムの基礎 (または中心要素?)

#上記のコードは、いくつかのベスト プラクティスの焦点です

Golang REST API アーキテクチャのエレガントな実装単一パッケージを使用して、次のことを行います。ルーティング ロジックを実装し、グループ化し、マウントします:

r.Mount("/api/todo", todo.Routes())
  1. API を確認する古いクライアントを壊さずに API を更新できるようにするため:

router.Route("/v1", .... )
  1. ミドルウェアを拡張機能として使用します。多くのルートを使用するコードは非常に面倒ですが、実際には、承認、応答ヘッダーの設定、圧縮、リクエスト ログ、レート制限などのリンク ミドルウェアに変えることができます。

著者 (コメントで Ajinkya が言及した問題に基づいて、walk メソッドについてさらに詳しく説明します):
  1. chi ルーティングには walk と呼ばれるメソッドがあります。このメソッドによって受信されるパラメータ:

A router

  • A callback.

  • Every 定義されたルートはすべてコールバックされ、次の 4 つのパラメータを受け取ります:

  • #ルート定義メソッド

    #実際のルートの文字列
  • #プロセッサ (関数)、指定されたルートのリクエストを処理します
  • 指定されたルートで定義されたミドルウェアのリスト (ミドルウェアは比較的単純な関数であり、次のように呼ばれます)ハンドラーが呼び出される前に、リクエストの処理や承認などの前に使用されます。)
  • 私の場合は、単純にルートをポーリングし、定義されているすべてのルートを出力します。これにより、利用可能なすべてのルートの概要が得られます。
  • 次に、実際に todo ロジックを保存する todo パッケージを構築します。

#注意事項

todo パッケージには、すべてのルートを返すメソッドがあります。これらのルートは main.go ファイルに書き込まれます。実際、私は通常、

.Golang REST API アーキテクチャのエレガントな実装

    を見つけやすいように、これらのルートを
  • routes.go,

    というファイルに書きます。ハンドラーには func (w http.ResponseWriter,r *http.Request) という関数シグネチャがあります。これは、このハンドラーが標準ライブラリを使用する net/http 書き込みメソッドと何ら変わらないことを意味します。

  • エンコーディング/json ラッパーである render.JSON を使用します。これにより、JSON 応答内のすべての html が自動的にエスケープされ、コンテンツ タイプが application/json に設定されます
  • その簡単さに怖気づいていませんか?このプロジェクトは GitHub https://github.com/tonyalaribe/todoapi/tre....

    でご覧いただけます。

    このシリーズの次の記事では、引き続き構成と共有状態をサポートします。通常、ほとんどのプロジェクトではデータベース接続などの追加構成が必要です。これについては次の記事で説明します。

    推奨チュートリアル:「Go チュートリアル

以上がGolang REST API アーキテクチャのエレガントな実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。