データベース上にある本情報のGET, POSTができます。 フォーラム情報のGET, POSTができます。
データベース上に以下のデータがあるので、これをGETRequestで取得できます。(ユーザ情報はまだ)
{"ISBN": 100, "title": "cool book", "description": "A super hero beats monsters."},
{"ISBN": 200, "title": "awesome book", "description": "A text book of go langage."}
ISBN:100の本に対するスレッドのタイトルリスト
{"id":1,"userID":1,"title":"I don't understand p.32 at all.","ISBN":100},
{"id":2,"userID":2,"title":"there is an awful typo on p.55","ISBN":100}
threadID:1のスレッドタイトル(上のメタ情報のid = 1のもの)に対するスレッドの発言リスト
{"id":1,"userID":11,"message":"Me neither.","threadID":1},
{"id":2,"userID":12,"message":"I think the author tries to say ...","threadID":1}
{"id":1, "userName":"Alice", "password": "pass"},
{"id":2, "userName":"Bob", "password": "word"},
{"id":11, "userName":"Carol", "password": "qwer"},
{"id":12, "userName":"Charlie", "password": "tyui"}
Docker上で動きます。
docker-compose.ymlと同じ場所で、
$ docker-compose up --build
でdocker上にサーバとmysqlサーバが立ち上がります。
サーバはホスト側の8080番ポートでアクセスできます。
$ docker-compose down -v
でデータベース初期化してコンテナ終了
(-v しないとvolumeがどんどん溜まっていく。VPSは-vいらない)
データベースを初期化しない場合は、
$ docker-compose stop
mysqlのコンテナ立ち上げ(buildは初回のみ)
$ docker build -t (イメージのタグ名) (database/ の場所)
$ docker run --name (コンテナ名) -p 3306:3306 (イメージのタグ名)
mysqlサーバを立ち上げたら、ローカルマシンのserver/で、
$ go test -v ./...
でテスト実行
データベースを初期化してmysqlサーバを終了するには(データベース初期化しないなら、stopだけでOK)、
$ docker stop -v (コンテナ名)
$ docker rm (コンテナ名)
{"ISBN":xxx,"title":"~","description":"~"}
{"title":"~"}
{"message":"~"}
{"userName":"~", "password":"~"}
で登録できます。
サーバ立ち上げ後、
$ curl {ホストのIPアドレス}:8080/books
で
[
{"ISBN": 100, "title": "cool book"},
{"ISBN": 200, "title": "awesome book"}
]
が取得できる。
ISBNでの取得は、
$ curl {ホストのIPアドレス}:8080/books/:ISBN
の書式
例えば、
$ curl {ホストのIPアドレス}:8080/books/100
でISBN = 100の本の詳細、
{"ISBN": 100, "title": "cool book", "description": "A super hero beats monsters."}
が取得できる。
$ curl {ホストのIPアドレス}:8080/books/300
は、対応するISBNの本を登録していなければ、
Not Found
が返ります。
あるISBNの本のスレッドタイトルのリストを取得する場合、
$ curl {ホストのIPアドレス}:8080/books/:ISBN/threads
で取得できる。
あるスレッドタイトルに対する発言リストを取得する場合、
$ curl {ホストのIPアドレス}:8080/threads/:threadID
で取得できる。
いずれも、対応するISBNもしくはthreadIDが存在しなかった場合は、
Not Found
が返ります。
- ユーザリストを取得する場合、
/users/lists
にGETリクエストを送信(ログインしている必要あり) - 返値:[{"id":xxx, "userName":"..."},...]
- 他人の本棚を見る場合、
/users/:id/books
にGETリクエストを送信(ログイン不要) - 返値:[{"ISBN": xxx, "title": "..."},...]
POSTリクエスト(ユーザの本棚への登録)は、
$ curl -X POST -H "Content-Type: application/json" -d '{"ISBN":xxx, ...}' {ホストのIPアドレス}:8080/books
で行えます。
登録が成功した場合、
{"ISBN":xxx,"title":"~","description":"~"}\n
が返ります。
もしJSONがフォーマット通りでない場合、
Invalid Post Format
が返ります。
もしユーザがその本を既に登録している場合、
Book has already been registerd
が返ります。
POSTリクエストは、
$ curl -X POST -H "Content-Type: application/json" -d '{"title":"~"}' {ホストのIPアドレス}:8080/books/:ISBN/threads
で行えます。
登録が成功した場合、
{"id":x, "userID":x,"title":"~","ISBN":xxx}\n
が返ります。
もしJSONがフォーマット通りでない場合、
Invalid Post Format
が返ります。
もし指定したISBNの本がデータベースに存在しない場合、
Book doesn't exist
が返ります。
もしログインしたuserIDのユーザがデータベースに存在しない場合、
User doesn't exist
が返ります。
POSTリクエストは、
$ curl -X POST -H "Content-Type: application/json" -d '{"message":"~"}' {ホストのIPアドレス}:8080/threads/:threadID
で行えます。
登録が成功した場合、
{"userID":x,"message":"~","threadID":xxx}\n
が返ります。
もしJSONがフォーマット通りでない場合、
Invalid Post Format
が返ります。
もし指定したthreadIDのスレッドがデータベースに存在しない場合、
Thread doesn't exist
が返ります。
もしログインしたuserIDのユーザがデータベースに存在しない場合、
User doesn't exist
が返ります。
POSTリクエストは、
$ curl -X POST -H "Content-Type: application/json" -d '{"userName":"~", ...}' {ホストのIPアドレス}/users/registration
で行えます。
ユーザ名は大文字小文字の区別なく、他人と重複してはいけません。
重複すると、
User already exists
が返ります。
成功すると、
{"id":x,"userName":"~"}
が返ります。
パスワードはbcryptで暗号化されます。
POSTリクエストは、
$ curl -X POST -H "Content-Type: application/json" -d '{"userName":"~", ...}' {ホストのIPアドレス}/users/login
で行えます。
失敗すると、
Login Failed
が返ります。
成功すると、
{"id":x,"userName":"~"}
が返ります。