2
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 5 years have passed since last update.

APIサービス(Lambda)REST

Posted at

#APIバックエンドサービスの例としてTODO管理アプリケーションのAPIバックエンドサービスをAPIGateway、Lambda、AmazonDynamoDBを使用して作成する

#REST API

HTTPのメソッド action
ANY     すべてのメソッドをサポートする
DELETE   リソースの削除
GET    リソースの取得
HEAD    リソースのヘッダ (メタデータの取得)
OPTIONS  リソースがサポートしているメソッドの取得
PATCH   リソースの部分的な変更
POST    子リソースの作成, リソースへのデータ追加, その他処理 冪等な操作
PUT    リソースの作成、リソースの更新, リソースの削除

REST.png

REST APIの設計
CloudFormationのテンプレート(json)

Lambdaはnode.js4.3でデプロイできた

#APIGatewayとは
ロットリン
マッピングテンプレート
モックアップ機能
バックエンドよりも先にクライアントの開発を行いたいときに、固定値を返す簡単なAPIを実装することができる
100万回のリクエストで3.5ドル
最大数十万の同時API呼び出しを受け付け処理する

todoIdリソースは{todoId}のようにしパラメータとし扱えるようにする
APIエンドポイント https://hogehoge-api.us-east-1.amazonaws.com/prod/v1/todos

RESTリクエスト

#list_todos
curl https://hogehoge/prod/v1/todos

#get_todo
curl https://hogehoge/prod/v1/todos/(todoId)

#update-todo
curl -X PUT -d '{"finishedAt":20}' -H Content-Type:application/json https://hogehoge/prod/v1/todos/(todoId)

#delete_todo
curl -X DELETE https://(todoId)
#update-todo/prod/v1/(todoId)

#put_list
curl -X POST -d '{"title":"text"}' -H Content-Type:application/json https://(todoId)/prod/v1/todos

#認証
主にサーバ間での認証などを想定した認証方式であらかじめ生成したAPIキーをリクエストヘッダー(x-api-key)に含めてアクセスした場合のみ、アクセス許可する
-H x-api-key:
[注意]EC2でのリクエストは応答したがブラウザからは認証されずにリクエストを処理してもらえなかった

#設定方法
・メソッドごとにAPIKeyRequiredを有効化し、再デプロイ
・APIKeyを作成する
UsagePlansでキーの使用プランを作成する(どのキーをしようするか、何度一日にキーの使用を許可するか(クォータ)、1秒あたりにリクエスト数(レート)、短期的な応答(バースト))
(リソース,メソッドごとにスロットリングができるため、会員のランクごとにサービスの差別化できる)

クォータリミットのエラー
{"message":"Limit Exceeded"}
認証のないメソッドを呼び出したときのエラー
{"message":"Forbidden"}

curl https://(API endpoint) /( todoId) -H x-api-key:(API key)

設計指針ポイント
PUT
更新成功の場合 → 204 No Content
クライアントにとって思い通りの結果になったということなので、中身は重要ではなく204で十分
DELETE
成功時 → 204 No Content
リソースがないので204が最適
失敗した時
4xxは通知することでクライアントまたはユーザが反応できる可能性があるときに利用する
トークンバケットモデル

HTTP レスポンスステータスコード

#各Lambda関数のプログラム
Lambdaのhandlerのeventオブジェクトの中身は、APIGatewayの統合リクエストのマッピングテンプレートで設定したものが渡される
"todoId":"$input.params('todoId')" =  event.todoId

curlコマンド

curl -I https://(APIEndpoint)/prod/v1/todos/(todoId) -H x-api-key:hogehoge

#PUT
curl -X PUT –d
--data  (省略形-d)  POSTで送信するデータを記述
application/json
{"title":"$input.params('title')"}
--header  (省略-H) リクエストヘッダを指定する

#その他
0からREST APIについて調べてみた
RESTful API(REST API)( REpresentational State Transfer)とは、
Webシステムを外部から利用するためのプログラムの呼び出し規約(API)の種類の一つ
RESTful API(REST API)とは、Webシステムを外部から利用するためのプログラムの呼び出し規約(API)の種類の一つ
また、リソースの操作はHTTPメソッドによって指定(取得ならGETメソッド、書き込みならPOSTメソッド)され、結果はXMLやHTML、JSONなどで返される。また、処理結果はHTTPステータスコードで通知するという原則が含まれることもある
REST APIについて

#見出し
強調
リンク


2
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
2
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?