2

バックグラウンド

いくつかの POST、PUT、および GET エンドポイントを持つ単純なプラグ ルーターがあります。ただし、各エンドポイントは、リクエストのヘッダーに対して特定の検証を行う必要があります。Plugでこれを達成する方法がわかりません。コード

リクエストを受信して​​コントローラーにリダイレクトする非常に一般的なルーターがあります。

defmodule Api do
  use Plug.Router

  alias Api.Controllers.{Product, NotFound, Ping}

  plug :match
  plug Plug.Logger
  plug :dispatch

  get "/ping",  do: Ping.process(conn)
  put "/product",    do: Product.process(conn)

  match _, do: NotFound.process(conn)
end

問題

ただし、ステップがありません。/products エンドポイントでヘッダーを検証する必要があります。つまり、ヘッダーには特定のフィールドが設定されている必要があります。たとえば、「conten-type」ヘッダーや「bananas」などのカスタム ヘッダーなどです。

この検証は、すべてのエンドポイントを対象とするものではありません。さらに悪いことに、各エンドポイントが独自の検証を行うことです。たとえば、「バナナ」ヘッダーを持つことは「/products」エンドポイントにとって重要かもしれませんが、「/ping」エンドポイントはあまり気にしません.

リサーチ

私はこの記事を読みました:

ただし、これはすべてのエンドポイントに適用され、特定のものではありません。

質問

  • 私が探しているものを Plug で達成することは可能ですか? もしそうなら、どのように?
4

1 に答える 1