『Web API: The Good Parts』を読んだ

Web API: The Good Parts

最近はWeb APIの開発ばかりやってますが、設計方法については『Webを支える技術』を読んだ程度でした。
Web API設計の基本はRESTなので、『Webを支える技術』はとてもためになりますが、もう少し実践よりの本も、ということで『Web API: The Good Parts』を読んでみました。

実践よりとはいっても、『Web API: The Good Parts』には具体的なWeb APIの実装は出てきません。
それよりも一段上の、「Web APIをどう設計すべきか」という点に焦点が絞られています。

また、「Good Parts」シリーズらしく、著者の独自の観点で練り上げられたベストプラクティスが網羅されています。
なお、出版は2014年ということで、gRPCのような新しめの概念には触れられていません。

Web APIチェックリスト

本書で一番良いと思ったのは、巻末の「Web APIチェックリスト」です。
ここには、本書で紹介されているベストプラクティスのうち、特に重要なものがリストアップされています。

一例を挙げると以下のような項目です。

  • URIが短く入力しやすくなっているか
  • URIが人間が読んで理解できるようになっているか

このリストをそのまま使ってもいいですし、自分たちでAPIの設計指針を定める場合にも、このリストをベースに作れば楽ができそうです。

標準を尊重する

本書の基本的な哲学は以下の二文で表されます。

  • 仕様が決まっているものに関しては仕様に従う
  • 仕様が存在していないものに関してはデファクトスタンダードに従う

「HTTPの仕様を活かしてWeb APIを作る」ということですね。
設計に迷ったときはまず仕様、仕様がないときはデファクトスタンダードを調べることが大切です。

具体例に基づいた解説

フィールド名をキャメルケースにするかスネークケースにするか、といった、標準が存在せず設計に迷う場面では、Twitter、Facebook等の大手Webサービスを調査して「デファクトスタンダード」を探っています。
この調査結果が載っているのもありがたいところ。

REST LEVELとHATEOAS

「どのくらいまでRESTに準拠しているか」を示すREST LEVELという概念があります。

  • REST LEVEL0 – HTTPを使っている
  • REST LEVEL1 – リソース概念の導入
  • REST LEVEL2 – HTTPの動詞の導入
  • REST LEVEL3 – HATEOASの概念の導入

本書は、現在多くのWeb APIで採用されている「REST LEVEL 2」に対応しており、「REST LEVEL 3」において導入されるHATEOASは導入していません。
HATEOASに関しては、本書の執筆時には「時期尚早」であったと思われますが、HALというHATEOASのための仕様と、その実装のためのライブラリも整備されてきているので、2017年現在は「採用を検討する」くらいのフェーズにはなっていると思います。

まとめ

これからREST APIを開発する人にはとても参考になる書籍だと思います。
gRPCのようにRESTの代替となる技術も出てきているので、RESTさえ知っていればOK、という状況ではなくなってきていますが、今でも主流はRESTでしょう。
ということでオススメです。

Software Design2014年11月号で『VirtualBox+CentOSでローカル開発環境を構築する』という記事を書きました

Software Design (ソフトウェア デザイン) 2014年 11月号 [雑誌]

Software Design誌の2014年11月号の第1特集『無理なくはじめるInfrastructure as Code』にて、第2章「VirtualBox+CentOSでローカル開発環境を構築する」を、同僚(岡本さん)と共著で執筆しました。元々は岡本さんに来た執筆依頼だったのですが、ちょうど岡本さんが別件で忙しかったことから社内で別の著者を探してて、私が手を挙げた、という経緯があります。

記事については岡本さんが序文と監修を担当し、構築手順については私が書きました(構築手順の構成は、岡本さんがスクール用に執筆した教材を参考にしています)。記事の内容については、CentOSのイメージをダウンロードしてVirtualBoxにインストール、ということで、かなりクラシカルです。

私の場合、最近はローカル開発環境はVagrantで作ることが多く、本番環境はAWS/Azureのようなクラウドを使うのが普通なので、isoからOSをインストールするのは久しぶりでした。とはいえ、この記事を書いた直後に、仕事でisoからインストールして開発環境を作る機会があったので、やはりインストーラと向き合う経験は必要ですね。

なお、特集全体の構成としては、1章で全体を概観し、2章は開発環境をマニュアルで作成、そこから3章のシェルスクリプト、4章のAnsible、5章ではDockerを使用したLAMP環境の構築へと進みます。Infrastructure as Codeという意味では、3章〜5章がメインといってよいでしょう(6章はAzure、7章がまとめ)。LAMP(Linux+Apache+MySQL+PHP)環境でWebアプリケーションを開発している方には参考になる部分が多いと思います。

ちなみに、記事執筆に際して一番苦労したのは、Windowsの操作だったりします。普段はMacで開発してるのですが、今回は「ホストOSはWindows7で」という注文があったので、会社のWindows PCを借りて構築手順を作りました。正直、VirtualBox使うならWindowsよりMacの方が楽だと思います。VirtualBoxのWindows対応がイマイチだったり、Windows PCによっては仮想化機能が無効になっていることがあったりと(BIOSの設定変更が必要)、色々と苦労が多いので。。。