3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Fn / OCI Functions 向けに アノテーションを使って HTTP リクエスト処理をすっきり書くフレームワークを作った話

Last updated at Posted at 2022-03-28

Fn / OCI Functions で API を開発するとします。API は API Gateway を通じて公開する想定です。例えば一連の複数オブジェクトに対する CRUD 処理としましょう。API Gateway 経由の Rest API の実装は、一つのオブジェクトについて同じURLに対する POST/GET/PUT/DELETE のメソッドでアクセスさせることになるでしょう。ではこの時 Function の粒度はどう考えればいいでしょうか? POST/GET/PUT/DELETE 毎に Function を分けますか?、さすがにそれはしないか... では同じ URL はひとまとめにして(=対象オブジェクト毎に)、URLのパス単位で Function を分けるのではどうでしょうか?う~ん、それでも Function の数が多くなっちゃうかな...?
つまり、適当な粒度で API 群をまとめて1つの Function で処理する必要が出てくる訳です。ですが、そうすると Function にまとめられた全ての API の入り口は(現状の FDK の仕様では)指定したクラスの単一のメソッドになります。そのメソッドでリクエストを受け取り、HTTP メソッド/パス を確認して、個々の API 処理に分岐させることになります。この処理をコーディングするの、面倒ですよね、if文だらけ、毎回似たようで異なる分岐処理、もっとすっきりとコーディングしたいです。そんなときに役に立つのがこのフレームワーク「Fn Event Router」です。

このフレームワークを使うと、

@FnBean
public class HelloFunction {

    @FnHttpEvent(method = "GET", path = ".*/hello", outputType = "text")
    public String hello(String input) {
        // ...
    }
// ...

のように、個々の HTTP リクエスト毎にメソッドをマッピングすることができます。Functions の入出力をお助けするJava/Jsonバインディング機能やヘルパークラス等も提供しています。

image.png

お試しあれ!

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?