Mercari Microservices Example
https://github.com/mercari/mercari-microservices-example
とりあえず動かして中身を見てみる。
起動
何はともあれとりあえず。
以下コマンドで色々構築してくれるらしい。
make cluster
完了したら確認
./script/kubectl get pods --all-namespaces | grep -E '^(gateway|authority|catalog|customer|item)' authority app-8595bfcfc7-9lcdx 2/2 Running 0 8m59s authority app-8595bfcfc7-kk828 2/2 Running 0 8m59s catalog app-7b59d8bf9f-czl82 2/2 Running 0 6m33s catalog app-7b59d8bf9f-g6dts 2/2 Running 0 6m33s customer app-687b79dfb8-chqq2 2/2 Running 0 4m4s customer app-687b79dfb8-fdfsd 2/2 Running 0 4m4s gateway app-57dcb5459b-c4fqb 2/2 Running 0 11m gateway app-57dcb5459b-gwdq5 2/2 Running 0 11m item app-785f56f55f-gt62x 2/2 Running 0 99s item app-785f56f55f-m79md 2/2 Running 0 99s
使ってみる
とりあえず動作確認
Readme準拠で倣っていく
Sign up
* jq入ってなかったのでbrewで入れる必要があった
$ curl -s -XPOST -d '{"name":"gopher"}' localhost:30000/auth/signup | jq . { "customer": { "id": "5010f592-3ba2-4612-a177-68551b39d509", "name": "gopher" } }
Sign in
$ TOKEN=$(curl -s -XPOST -d '{"name":"gopher"}' localhost:30000/auth/signin | jq .access_token -r)
Create item
$ curl -s -XPOST -d '{"title":"Keyboard","price":30000}' -H "authorization: bearer $TOKEN" localhost:30000/catalog/items | jq . { "item": { "id": "bef06630-5724-4b59-b97c-3dba9289da1f", "customer_id": "5010f592-3ba2-4612-a177-68551b39d509", "title": "Keyboard", "price": "30000" } }
List item
$ curl -s -XGET -H "authorization: bearer $TOKEN" localhost:30000/catalog/items | jq . { "items": [ { "id": "bef06630-5724-4b59-b97c-3dba9289da1f", "title": "Keyboard", "price": "30000" }, { "id": "e0e58243-4138-48e5-8aba-448a8888e2ff", "title": "Mobile Phone", "price": "10000" }, { "id": "0b185d96-d6fa-4eaf-97f6-3f6d2c1649b6", "title": "Laptop", "price": "20000" } ] }
Get a item detail
$ curl -s -XGET -H "authorization: bearer $TOKEN" localhost:30000/catalog/items/e0e58243-4138-48e5-8aba-448a8888e2ff | jq . { "item": { "id": "e0e58243-4138-48e5-8aba-448a8888e2ff", "customer_id": "7c0cde05-4df0-47f4-94c4-978dd9f56e5c", "customer_name": "goldie", "title": "Mobile Phone", "price": "10000" } }
以上で動作確認完了
アイテムを追加してみる
ガジェットばっかなのでマウスでも追加してみます。いいやつなので5,000円します。
$ curl -s -XPOST -d '{"title":"Mouse","price":5000}' -H "authorization: bearer $TOKEN" localhost:30000/catalog/items | jq . { "item": { "id": "1e16c24f-b9a7-4078-80c2-3ad55e703be1", "customer_id": "5010f592-3ba2-4612-a177-68551b39d509", "title": "Mouse", "price": "5000" } }
"id": "1e16c24f-b9a7-4078-80c2-3ad55e703be1"
が振られました。
customer_idはgopher君に振られたIDのよう。authorityでSignInで作ったTOKEN変数を渡してgopher君でサインインしてるっぽい。
一応一覧表示から確認してみる。
$ curl -s -XGET -H "authorization: bearer $TOKEN" localhost:30000/catalog/items | jq . { "items": [ ... { "id": "1e16c24f-b9a7-4078-80c2-3ad55e703be1", "title": "Mouse", "price": "5000" } ] }
一番下に追加された。
この一連の流れをマイクロサービスでどう処理しているのか、を調べたい。