firebase functionsでサーバレスAPI
hello firebase functions
firebase で functions。
functions
はfirebase
のサービスの中で、Node.js
による関数を実行できるすごいやつです。
サーバサイドプログラムを動かすのに自分でサーバを用意する必要がないんです!
いままでheroku
などを使っていましたが、無料の spark 枠でも使えるので、簡単な API を作って動かしてみました。
firebase-tools のインストール
公式サイトに書いてあるとおりです。
npm
かyarn
を使ってグローバルにインストールします。
npm install -g firebase-tools
functions を使う準備
使いたいプロジェクトで以下を実行。
ウィザードに従って、JavaScript か TypeScript か選べぇ?
firebase init functions
これで空のfunctions
ディレクトリが作成される。
関数の作成
functions
ディレクトリが作成されたら、直下にindex.js
を作成。
const functions = require('firebase-functions');
// 受け取ったメッセージをJSONに詰めて返すだけの関数
exports.echoMessage = functions.https.onRequest((req, res) => {
res.json({echo: req.query.text});
res.end(); // Responseオブジェクトを閉じておかないと怒られる
});
ローカルテスト
ちんけなプログラムなので、そのままノーテストでデプロイしてもいいけど、一応ローカルで動作確認。
firebase serve --only functions
=== Serving from '/Users/nekoha/develop/hexo-blog'...
i functions: Preparing to emulate functions.
Warning: You're using Node.js v9.11.2 but Google Cloud Functions only supports v6.11.5.
✔ functions: echoMessage: http://localhost:5000/[プロジェクト名]/us-central1/echoMessage
info: User function triggered, starting execution
info: Execution took 14 ms, user function completed successfully
info: User function triggered, starting execution
info: Execution took 1 ms, user function completed successfully
自作 API の URL が表示されています。
今回だとhttp://localhost:5000/[プロジェクト名]/us-central1/echoMessage
で待ち受けていますね。
クエリパラメータを受け取って返す関数なので、curl
コマンドから?text=helloworld
を付けて実行してみましょう。
[プロジェクト名]
のところは自分のプロジェクト名が入っているはずです。
curl http://localhost:5000/[プロジェクト名]/us-central1/echoMessage?text=helloworld
# {"echo":"helloworld"}
{"echo":"helloworld"}
と表示されれば成功です!
デプロイ
firebase deploy --only functions
デプロイが成功すると、アクセスするための URL が表示されます。
これをメモっておきましょう。
忘れても大丈夫。プロジェクトコンソールからも確認できます。
動作確認
いよいよ動作確認です。
先程メモった URL をcurl
コマンドからリクエストします。
クエリパラメータ?text=helloworld
を付けて実行してみましょう。
curl https://us-central1-[プロジェクト名].cloudfunctions.net/echoMessage?text=helloworld
# {"echo":"helloworld"}
{"echo":"helloworld"}
と表示されれば成功です。
大したこともせずに API を作成することができました!