RESTroom

トイレにRESTfulなAPIを実装してみた : Eleclog. がおもしろかった。ブックマークコメント欄の大喜利もおもしろかった、ってのは余談として。

ところで、もし自分が設計者なら「トイレに関する操作を、どのようにリソースの CRUD に落とし込むだろうか」って考えた。これは Web API を開発する人々にとっては、設計のよいエクササイズになるのではないか、と思った。「Internet of Things」と叫ばれる時代において、現実世界のアレやコレやをリソースとして定義して API 経由でナンチャラやカンチャラするシーンは、今後、増えてくるのかもしれないので。

件のエントリよりリンクされているソースコードを見てきた。Android アプリの方のコードが、今回扱う話題に関しては都合がよかったのでこっちを。

https://github.com/9SQ/RESTful-Toilet-App

MainActivity あたりを見ればよさそう。

https://github.com/9SQ/RESTful-Toilet-App/blob/7e0375883766f186de4fafd365d2f30bcb46b559/app/src/main/java/com/quitsq/toiletcontrol/MainActivity.java

一部を抜粋してみる。

buttonRear.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        httpRequest("POST", "rear");
    }
});

buttonSoft.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        httpRequest("POST", "soft");
    }
});

buttonBidet.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        httpRequest("POST", "bidet");
    }
});

buttonStop.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        httpRequest("POST", "stop");
    }
});

buttonBig.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        httpRequest("DELETE", "big");
    }
});

buttonSmall.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        httpRequest("DELETE", "small");
    }
});

bidet ってたぶん「ビデ」のことだよな〜、とか、無駄な知識を獲得したりもしたけれど、これも余談だ。ぼくがおもしろいと感じたのは「DELETE big」「DELETE small」している処理。これは「大で流す」「小で流す」に相当するものだと思う。

ぼくは当初「水を流す、だから、PUT water かなぁ」とか思ったりしていたのだけど。これを DELETE で表現するのがおもしろいと思った。DELETE が成功したときに 204 No Content が返ってきたら「ちゃんと流れたな」と感じられてよさそう。なんの話だ。