HTTPリクエストヘッダを表すtraitです。言う型が用いられています。詳細については本記事の範囲を大きく超えるため、詳しく解説しません。知りたい方には以下の資料が参考になると思われます。出力として返却する非同期ストリーム処理を表しています。型の返り値を得られます。いま、ここでもう一度Actionの定義にもどってみます。Actionは下記のように、リクエスト全体を引数にとり、レスポンスを返却する関数から構成可能でした。レスポンス}レスポンスは非同期も許容するため、Actionは大雑把にいって以下のような変換を表すことが分かります。traitを継承しています。Future[Result]あれ、どこかで見たことある形ですね。Action[A](Aはボディを表す型)はEssentialActionを継承しています。Result]を表すEssentialActionであるとみなすことができます。EssentialActionの使用用途リクエストハンドリングに用いるためのActionが汎用的なEssentialActionとみなせることがわかったところで、次にこれを用いてどのような処理を記述できるか見てみましょう。EssentialActionはtraitですが、同名のobjectも存在し、そこには以下の様なapplyメソッドが定義されています。}}ここでやっている処理、結構わかりにくいのですが、traitを継承する新しい匿名クラスを宣言し、そこでFunction1のapplyを実装しています。カスタムのEssentialActionを実装する際にはこのapplyメソッドを用いてカスタムのEssentialActionを作成します。}}以下の様な形でヘッダから得られる情報をActionから容易に用いれるようにすることです。}}EssentialActionを用いて認可処理のためのアクションを実装する認可処理を行い、認可エラーだった時の処理をまとめて行ってくれ、かつ認可成功したときはユーザに関わる情報を提供してくれるカスタムの認可アクションをEssentialActionを用いて作ってみます。この認可処理に際して、外部で次のような認可サービスがある前提に立ちます。認可サービスの認可メソッド、ここではサンプルのため、ダミーデータを返却するようにします。実装に際してはコントローラにこのサービスがある必要があるのですが、その要請をtraitで表現し、そのtraitの配下で以下のようにカスタムのアクションを宣言します。UserInfoActionを使いたいコントローラに対して認可サービスをインジェクトするように要請します。認可用のトークンが置かれるヘッダのキーです。カスタムの認可アクション生成部、ユーザ情報をヘッダから読み出し、Actionから読み込めるようにします。Authorizationヘッダの値をOption[String]で取得します。ヘッダの中身がないときは401で返却します。ここで、Done.applyはIterateeのうち、ストリーム処理終了状態を表すDoneIterateeを生成するコンストラクタです。ヘッダの中身がある時の処理を記述します。A]に変換するメソッドです。Iterateeへの変換はメソッド引数のactionを通じて行います。リクエストヘッダ引数の適用を行うことでIterateeを得ています。実際にControllerで用いるときは次のように認可サービスをインジェクトした上で、必要なTraitを継承します。}}UserInfoActionに既存のActionをネストするだけで認可処理が行われます。EssentialActionのテストEssentialActionに対するテストはSpecs2のcallを通じて行いやすくなっています。コード例だけ掲載しますが、UserInfoActionを噛ませて認可処理ができていることが確認できると思います。}}まとめいかがでしたでしょうか。APIのあらゆる箇所で使う認可処理等に代表される、ヘッダからの情報取得、コンバート、エラーフィルタリングを簡潔に実装できるコンポーネントをEssentialActionを通じて実現できることがおわかりいただけたかと思います。本記事で紹介した認可処理以外にも、UAヘッダのパース処理、セッションやクッキーの管理でEssentialActionは効力を発揮します。〜ログ収集、監視、分析を触って体感しよう!〜」を開催しますお申し込み受付は終了しました。ありがとうございました。今後セミナーのお知らせを受け取りたい方は、こちらからご登録をお願いします。CAFEのサービスが「LINEアプリ」として利用できるようになりました。これまではLINEのトークから利用する形でしたが、LINEサービス内から利用できるようになりました。これまでより便利に、シームレスにご利用いただけます。Cafe300件のシェア(そこそこ話題の記事)インフラ未経験の私が内定から入社までに読んだ技術書11冊ブログ記事2020年01月16日Yui300インフラ未経験で入社した私がインフラを勉強するために読んだ技術書11冊を感想とともにまとめました。平野重利123Pythonで、標準入力を変換して標準出力に出すCLIプログラムのテンプレートをご紹介します。菊池修治47こんにちは、菊池です。勉強会#1に登壇しました。サーバのみならずネットワーク機器の仮想化も年々進んでいます。スペックに縛られないこととか、展開のしやすさとか初期考慮点が少なくなるのは嬉しいです。武田隆志1098このエントリは、2018年、2019年に公開したAWS全サービスまとめの2020年版です。これまではいくつかに分割して公開していましたが、1エントリにまとめてほしいという要望をもらっていたため、今年は1エントリに集約してみました。CAFEのサービスが「LINEアプリ」として利用できるようになりました。これまではLINEのトークから利用する形でしたが、LINEサービス内から利用できるようになりました。これまでより便利に、シームレスにご利用いただけます。Cafe300件のシェア(そこそこ話題の記事)インフラ未経験の私が内定から入社までに読んだ技術書11冊ブログ記事2020年01月16日Yui300インフラ未経験で入社した私がインフラを勉強するために読んだ技術書11冊を感想とともにまとめました。悠紀235ShifterはWordPress環境をサーバーレスで立ち上げ、静的なサイトを生成することができるサービスです。FAQサイトをサクッと作ってみました。Takumi227こんにちは。DA事業本部の春田です。クラスメソッド株式会社が運営するAWS・iOS・HTML5に関する技術情報サイトです。