cookpad-internship-2018-summer

仕様

slackpad-server は REST API と Chat Protocol (WebSocket) を提供します。

REST API

REST API としては以下のエンドポイントが存在します。

GET /channels

チャンネル一覧を取得。

パラメタ

パラメタ名
page1オプション
per_page50オプション

$ curl -s http://localhost:3000/channels | jq
[
  {
    "id": 1,
    "name": "hogelog-channel",
    "created_at": "2018-07-12 13:42:18 UTC",
    "updated_at": "2018-07-12 13:42:18 UTC"
  },
  {
    "id": 2,
    "name": "general",
    "created_at": "2018-07-12 13:45:17 UTC",
    "updated_at": "2018-07-12 13:45:17 UTC"
  }
]

GET /channels/:channel_id/messages

チャンネルの過去メッセージを受け取る。

パラメタ

パラメタ名
channel_id1必須
page1オプション
per_page50オプション

$ curl -s 'http://localhost:3000/channels/1/messages?page=2' | jq
[
  {
    "id": 2,
    "nickname": "robot",
    "message": "こんにちわこんにちは!",
    "created_at": "2018-07-12 13:42:20 UTC",
  },
  {
    "id": 1,
    "nickname": "hogelog",
    "message": "Hello World!",
    "created_at": "2018-07-12 13:42:18 UTC",
  }
]

POST /channels/:channel_id/messages

チャンネルにメッセージを投稿する。

パラメタ

パラメタ名
channel_id1必須
nicknamerrreeeyyy必須
messagehello!必須

$ curl -s -X POST 'http://localhost:3000/channels/1/messages -d nickname=rrreeeyyy -d message="hello!"
{
  "id": 2,
  "channel_id": 1,
  "nickname": "rrreeeyyy",
  "message": "hello!",
  "created_at": "2018-07-27 10:54:11 UTC",
  "updated_at": "2018-07-27 10:54:11 UTC"
}

POST /images

画像を投稿。

パラメタ

パラメタ名
filenameok.gif必須
dataR0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAQQAOw==必須

$ curl -s -X POST http://localhost:3000/images -d filename=ok.gif -d data=R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAQQAOw==
{
  "id": 1,
  "filename": "ok.gif",
  "created_at": "2018-07-12 13:42:18 UTC",
  "updated_at": "2018-07-12 13:42:18 UTC"
}

GET /images/:id

画像を取得。

パラメタ

パラメタ名
id1必須

$ curl -v http://localhost:3000/images/1
...
< HTTP/1.1 200 OK
< Content-Type: image/gif
< Content-Disposition: inline
< Content-Transfer-Encoding: binary
< Cache-Control: private
< ETag: W/"8d7483433b479a6f6ecf7257fc636d85"
< X-Request-Id: 58d81b47-c7be-4fb6-80fe-10b0fa0982ad
< X-Runtime: 0.002065
< Transfer-Encoding: chunked
<
* Connection #0 to host localhost left intact
GIF89a,;

Chat Protocol (WebSocket)

slackpad-server アプリケーションは /ws のパスで WebSocket ベースのチャット機能を提供する。 /ws に接続したクライアントには各クライアントが送った各種コマンドに対するリプライが送られてくる。

チャットコマンドとしては以下のコマンドが存在します。

フォーマット

コマンド(クライアントメッセージ)

<command> <params>

リプライ(サーバメッセージ)

:<prefix> <command> <params>

コマンド

user [<nickname>]

接続クライアントのユーザ名で認識させる。 実行直後に general チャンネルにジョインされる。 このコマンドを実行前に各種コマンドを送った場合の動作は未定義。

リプライ
> user ["hogelog"]
< :hogelog user ["hogelog"]
< :hogelog join ["general"]

join [<channel>]

チャンネルにジョインする。 ジョインしたチャンネルでの message リプライが送られてくるようになる。

リプライ
> join ["じぇねらる"]
< :hogelog join ["じぇねらる"]

part [<channel>]

チャンネルを抜ける。 抜けたチャンネルからは message リプライが送られてこなくなる。

リプライ
> part ["じぇねらる"]
< :hogelog part ["じぇねらる"]

message [<channel>, <message>]

チャンネルにメッセージを送信する。

リプライ
> message ["general", "はろーはろー"]
< :hogelog message ["general","はろーはろー"]
< :sunao message ["general","こんにちは。"]

list [<channel>]

チャンネルにジョインしているニックネーム一覧を取得します。

リプライ
> list ["general"]
< :slackpad list ["general", ["hogelog", "sunao", "superman"]]