サーバーレスなAPIについて検討メモ

  • 2
    Like
  • 0
    Comment

AWS API Gateway について理解が弱いので調べる

Amazon API GatewayとLambdaを利用したサーバレスなWebアプリを作ってみた
https://www.cresco.co.jp/blog/entry/445/

料金 - Amazon API Gateway | AWS
https://aws.amazon.com/jp/api-gateway/pricing/

AWS料金早見表 - Qiita
http://qiita.com/teradonburi/items/a382a17e1e0245b7d831

Amazon API Gateway & Lambda & S3 で放置可能なサービスを作ってみた -
Qiita http://qiita.com/macoshita/items/10bc707a019431817952

Amazon API Gateway を使って AWS 以外のサービスの API をラップする |
Developers.IO
http://dev.classmethod.jp/cloud/aws/api-gateway-wrap-api/

> Amazon API Gatewayってなんぞや? > Amazon API
Gatewayとはどんなサービスか改めて知っておきましょう。 > Amazon API
Gatewayは簡単にAPIの作成・管理ができるフルマネージドなproxyサービスです。
> > このサービスは、AWS
LambdaやEC2、またはパブリックにアドレス指定可能なAWS外でホストされているサービス上で実行されているAPI実装に対して、すべてのアプリケーションと接続することが容易になるサービスです。

golang を使ったAPI実装が現実味があるか、もしくは、代替案を確認する

AWS LambdaでJavaとNode.jsとGoの簡易ベンチマークをしてみた。 - 谷本 心 in
せろ部屋 http://d.hatena.ne.jp/cero-t/20160101/1451665326

» Apex で Go はどう実行されているのか TECHSCORE BLOG
http://www.techscore.com/blog/2016/12/08/how-does-golang-run-on-apex/

eawsyのaws-lambda-goを使ってみる — そこはかとなく書くよん。
http://tdoc.info/blog/2016/11/02/eawsy_lambda.html

AWS Lambdaで効率的にgoバイナリを実行する — そこはかとなく書くよん。
http://tdoc.info/blog/2016/01/07/lambda.html

Apexを使ってGoでlambdaを動かす - Qiita
http://qiita.com/dora56/items/b3acb3f4e45e68dce6a8

>
ただ「たまに行う処理」を「少ないリソース」で行うという観点では、Goで実装するのが良さそうです。GoはそのうちLambdaでも正式サポートされそうですしね。
>
きちんとしたベンチマークは、また別の機会にじっくり行ってみたいと思います。
> ということで、Goを使う大義名分ができたベンチマークでした!

WEB API周りの検討

  • 前提のキメの部分

    • サーバーレスにする
    • AWS Lambdaを使う
    • WEB APIをつくる
  • APIの理論

    • REST API
    • ROA
  • 実装の言語

    • golangを使ってみたい
    • golangは早くなりそうな気がする(もし正式対応されれば)
      でもベンチマーク比較をみてもそこまで変わらなそう
    • lambdaに対応させるとするとApexを使うことになりそう
    • NodeJSも便利に使えそう
    • NodeJSはクラウドと親和性が高い気がする、少なくとも今は。
  • Serverless(FaaS)の理論

    • Serverless(FaaS)の適用領域
      • ライトユースなAPI(前述のコーポレートサイトのお問い合わせフォームなど)
      • Event DrivenなGlue(糊)としての役割
      • SPA、ネイティブアプリ等のバックエンドAPI
      • Micro servicesの基盤として
    • Step Functions
      • 関数を状態をもたせつつ連動させる機能ってことかな
      • テストの面でも便利なので考えておいた方良さそう
    • Serverlessの面白みと本質
      • WEBサーバのアーキテクチャが隠蔽化されている
      • デプロイ時にWEBサーバのプロセスを意識する必要がない
      • 開発チームの運用負荷が減るので、アプリケーションの開発に注力出来る
  • APIを実装することを前提にインフラ(aws lambda)のフレームワークの選定

    • SAM
      今回の場合には複雑そうだけど理屈は納得
    • CloudFormation
      クラウドを扱う時点で使えるようになっておいてもいいのかもしれないが、今は面倒
    • Serverless Framework
      一番便利そう。golangは対応しない。
    • Apex
      SPAのバックエンドに適している。golangならこれかな。
    • クラウドとAPI実装の統合型フレームワーク

      • goSparta
        goのapiを構築するフレームワークでクラウドの設定も担う形
      • Claudia.js
        NodeJSのapiを構築するフレームワークでクラウドの設定も担う形 解説記事を見る感じだと割とシンプルに使えそう
  • WEB APIフレームワーク

    • NodeJS
      • LoopBack
      • クラウドとAPI実装の統合型フレームワーク
        • Claudia.js
    • golang

      • ECHO
        現段階では日本語情報が多そうだし、人気の伸びがある
      • Revel
        ECHOよりも前から人気があったっぽい、評価している人がいたので気になる
      • クラウドとAPI実装の統合型フレームワーク
        • goSparta
          日本語情報がないので使う自信がないけどもしかすると良さそう、クラウド開発の流れ次第
  • APIのリクエストとレスポンス

    • WEB APIへの送信
    • WEB APIからのレスポンス
    • WEB APIからのエラーレスポンス
  • APIの設計

    • スタンダードな理論に沿ったAPIの設計
      • Rest APIのRFC.プラスアルファなのかな。。
    • ルーティング
      • URLの設計や洗い出し

WEB APIの理論

概念体系

Railsを支える基本概念の整理(RESTfulやリソースなど) - Qiita
http://qiita.com/kidach1/items/43e53811c12351915278

> リソースとは >
データモデルとwebインターフェイスが組み合わさったもの。

翻訳: WebAPI 設計のベストプラクティス - Qiita
http://qiita.com/mserizawa/items/b833e407d89abd21ee72

REST API

REST APIの共通仕様 – cybozu developer network
https://cybozudev.zendesk.com/hc/ja/articles/201941754-REST-API%E3%81%AE%E5%85%B1%E9%80%9A%E4%BB%95%E6%A7%98

RESTful APIとは何なのか - Qiita
http://qiita.com/NagaokaKenichi/items/0647c30ef596cedf4bf2

ROA

リソース指向アーキテクチャ(ROA)とは何なのか - Qiita
http://qiita.com/NagaokaKenichi/items/0f3a55e422d5cc9f1b9c

サーバーレス

Serverless Advent Calendar 2016 - Qiita
http://qiita.com/advent-calendar/2016/serverless

Serverless(2) Advent Calendar 2016 - Qiita
http://qiita.com/advent-calendar/2016/serverless2

サーバーレスで作ったWeb APIのシナリオテストや定常監視もサーバーレスで。
- Qiita http://qiita.com/RyoheiMorimoto/items/6233b2dd1be488321df9

>
前節のような単体のAPI機能テストをつなげて、シナリオテストを実現できないかを考えます。
> せっかくなので、先日のre:Invent 2016で発表されたStep
Functionsを使ってみます。

サーバーレスの本質(Paasでいいんじゃないのか)

各社のサービスから見えるServerlessの本質とは何か - Miscellaneous notes
http://marcy.hatenablog.com/entry/2016/04/01/152751

サーバーレスの構成ツール

【AWS】CloudFormationまとめ - Qiita
http://qiita.com/iron-breaker/items/a12d1228de12663e7d32

SAM(Serverless Application Model) + Node + Flowtype でAWS
Lambdaの開発サイクルを作る - Qiita
http://qiita.com/kinzal/items/7a09659399d9be40d674

> 待望の環境変数対応や、Step FunctionによるAWS
Lambdaのバッチ化、Serverless Application
ModelというAWS公式のデプロイツール、ServerlessやApex、LamveryなどのLambda関連のフレームワークの充実など、一年前に比べAWS
Lambdaが便利になっています。

> SAMはAWSが新しく出したAWS Lambdaのデプロイツールです。 >
https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md
>
機能としてはCloudFormationのラッパーで、ローカル→S3にコードをアップロードし、CloudFormationでLambda
Functionや他リソースの作成を行うことができます。

WEB APIのフレームワーク

Web API フレームワーク LoopBack で遊んでみる - Qiita
http://qiita.com/kyrieleison/items/defee6a9450b18ae9554

概観からGoのWebFrameworkを選ぶ(2016/02) - Qiita
http://qiita.com/jumbOrNot/items/45f86db15a5a6c8a0622

> 比較対象 > Revel > beego > Gin > martini > goji >
echo

goのweb frameworkについて調べる - Qiita
http://qiita.com/sao_rio/items/e21cccff304791129e33#_reference-6fe5faae43be4fe0fe8b

> frame work github star 触った感じ > echo 4686
少ない行で簡単に書ける。 > gin 6829 少ない行で簡単に書ける。 >
martini 8257
ドキュメントが充実している,少ない行で簡単に書ける。周辺機能(ミドルウェア)が充実している。
> beego 7337 少ない行で簡単に書ける。 > goji 3097
issueが少ない。作りがシンプル。

ServerlessConf 2016 Tokyo 2016「Unlimited Frameworks」セッション解説
#serverlessconf | サーバーワークス エンジニアブログ
https://blog.serverworks.co.jp/tech/2016/10/03/serverlessconf-session/

> それぞれの使い分け > > Serverless Framework >
多くのAPIを持つバックエンドシステム等を作るための最有力フレームワーク。
> Apex >
SPAのバックエンドの細かいAPI等を簡単に作りたいフロントエンドエンジニア向け。
> Chalice >
とにかく簡単に作りたい人向け。コーポレートサイト等をS3から配信したいけど、問い合わせフォームはほしい等のライトユースなら一番簡単に使える。
> Zappa >
新しいフレームワークの学習コストを払わずに、従来のものを使ってLambdaの持つコストメリット等は享受したい。または既にDjango等で作成済みのシステムをできるだけそのまま移植したい等。
> Lamvery > Event
Drivenなサービス間のGlue(糊)としてのLambda利用を簡単に正しく行えれば良い。APIはあまり重視しない。
> >
現状、LambdaをはじめとしたServerless(FaaS)の適用領域は以下の分類ができると思っています。
> >
ライトユースなAPI(前述のコーポレートサイトのお問い合わせフォームなど)
> Event DrivenなGlue(糊)としての役割 >
SPA、ネイティブアプリ等のバックエンドAPI > Micro servicesの基盤として
> > 課題 > >
Functionにタグ付けする等して、論理的なグルーピングとそれを単位としたデプロイや管理を実現する
> エイリアスやAPI
Gatewayのステージ機能を活用し、CIツールの統合などを意識した実践的な開発フローを確立する
> 依存ライブラリの選択的な同梱とその依存関係の可視化 >
Function間の呼び出し関係や外部リソースとの依存の管理と可視化

Serverless Framework

AWS Lambdaを活用したServerless Frameworkを触ってみる - Qiita
http://qiita.com/susieyy/items/1c2af0ef7b88b742c37a

Serverless Framework使ってみたメモ | ブログ :: Web notes.log
http://blog.wnotes.net/blog/article/serverlesss-framework-beginning

WEB APIでのエラー

WebAPIでエラーをどう表現すべき?15のサービスを調査してみた - Qiita
http://qiita.com/suin/items/f7ac4de914e9f3f35884

> エラーメッセージ: 開発者が読んで分かるメッセージを入れる。 >
エラーコード:
クライアントのプログラムがエラーハンドリングの手がかりになる情報を与える。加えて、ドキュメントではエラーコードの一覧を公開する。
> 複数エラー:
サービスによってケースバイケースだが、複数のエラーが表現できるようになっている。
> 詳細URL:
公開APIでドキュメントが整っているなら、開発者のググる手間がなくなる。
> 一貫性: どのエンドポイントでも同じ構造のJSONになっている。 >
シンプル:
複雑な構造がなくネストが浅いJSONのほうがクライアントが複雑な型を定義しなくて済む。

RFC 7807 - Problem Details for HTTP APIs
https://tools.ietf.org/html/rfc7807

RFC

<script type="application/problem+json">

{

"type": "https://example.com/probs/out-of-credit", "title": "You do
not have enough credit.", "detail": "Your current balance is 30, but
that costs 50.", "instance": "/account/12345/msgs/abc", "balance": 30,
"accounts": ["/account/12345", "/account/67890"]

}

</script>

RESTful APIのHTTPステータスコード設計 - Qiita
http://qiita.com/NagaokaKenichi/items/eb85b5fbb719d60c6627

Qiita のリスト

REST-APIに関する57件の投稿 - Qiita http://qiita.com/tags/REST-API

RESTfulに関する40件の投稿 - Qiita http://qiita.com/tags/RESTful

WebAPIに関する182件の投稿 - Qiita http://qiita.com/tags/WebAPI

apiに関する660件の投稿 - Qiita http://qiita.com/tags/api

特定の言語やプラットフォームでのWEB APIフレームワーク

Go言語で REST API + マイクロサービス - Qiita
http://qiita.com/pottava/items/46e087f3c06117b31ccc

GoでJSON APIを書く - sgykfjsm.github.com
http://sgykfjsm.github.io/blog/2016/03/13/golang-json-api-tutorial/

Echo – Go 言語 REST API 開発向け Web Framework の紹介
https://eurie.co.jp/blog/engineering/2015/12/go-lang-web-framework-echo

NodeJS + Claudia.js

Lambda公式のブログでも紹介されている

Node.jsでLambdaを開発するならClaudia.jsがオススメ - Qiita
http://qiita.com/gaishimo/items/5ae6b35ebd4ae9434994

>>
LambdaでJavaScriptを実行させて気が付いたのですが,言語固有の問題というのは実にたくさんあるのです。

> Lambdaのデプロイツール(フレームワーク)といえばServerless
FrameworkやApexなど多数存在しますが、他のツールとくらべてClaudia.jsは何が違うのでしょうか?
>
最も大きな特徴は、Node.jsに特化しているという点です。Apexのように複数のプログラミング言語に対応しているツールと異なり、Claudia.jsはNode.jsしかサポートしていません。その分、プログラミング言語に踏み込んだ機能が提供されているため、開発者は必要最小限のコードで開発を行うことができます。

>
Claudia.js自体はフレームワークではなく、シンプルなコマンドラインによるデプロイメントツールですが、API
Builderという拡張ライブラリを使うことにより、API
GatewayとLambdaを組み合わせたWeb
APIを簡易に作成することが可能になります。

Node.jsでLambdaを開発するならClaudia.jsがオススメ - Qiita
http://qiita.com/gaishimo/items/5ae6b35ebd4ae9434994

Claudia.js を使った簡単マイクロサービス開発 | Developers.IO
http://dev.classmethod.jp/etc/microservices-with-claudiajs/

Claudia.jsでServerless入門 - Qiita
http://qiita.com/kitatuba/items/c46919a893419519104a

How to turn Node.js projects into AWS Lambda microservices easily with
ClaudiaJS | AWS Compute Blog
https://aws.amazon.com/jp/blogs/compute/how-to-turn-node-js-projects-into-aws-lambda-microservices-easily-with-claudiajs/

NodeJS + LoopBack

Web API フレームワーク LoopBack で遊んでみる - Qiita
http://qiita.com/kyrieleison/items/defee6a9450b18ae9554

golang + lambda

AWS Lambdaで効率的にgoバイナリを実行する — そこはかとなく書くよん。
http://tdoc.info/blog/2016/01/07/lambda.html

golang + lambda + Apex

Lambda with Apex: 環境変数で環境別にLambda環境を整える - Qiita
http://qiita.com/gaishimo/items/af2a05bcaf4cb96e534b

golang + echo

Golang + echoでAPIサーバを書いてみる - peroon's diary
http://peroon.hatenablog.com/entry/2016/08/02/213018

Go+echoにURLパラメータでユーザIDを入れてMongoDBから引く - peroon's diary
http://peroon.hatenablog.com/entry/2016/08/04/181956

golang + gosparta

目的には合致してるかも 日本語情報がほぼない
Apexをつかったほうが標準的かもな

A Go framework for AWS Lambda – Medium
https://medium.com/@mweagle/a-go-framework-for-aws-lambda-ab14f0c42cb#.tu92x498x

mweagle/Sparta: Run go functions in AWS Lambda
https://github.com/mweagle/Sparta

AWS
Lambdaで動くGo言語用フレームワーク。面白いのは汎用的なgoバイナリをLambdaで動かすのではなくfunctionとして書き、AWS周りの設定も全部ソースコードに埋め込めるところか。面白い
- tmatsuu のコメント / はてなブックマーク
http://b.hatena.ne.jp/entry/276911416/comment/tmatsuu

PHP + yii2 番外編かな

yii2で高性能なWebAPIを実現する - Qiita
http://qiita.com/kitatuba/items/4d8564fde125febcb8ac

単なるGoのメモ

Awesome Go https://awesome-go.com/