Photo by Paco CT
いま、Sticka用などに外部からデータの更新と参照をするためにWebAPIを計画しているんだけど、WebAPIと一口に言っても、いろいろなプロトコルがあって、どれを採用するかでとても悩み中。
候補になっているのは下記の4つ。
- RESTful (Rails)
- XML-RPC
- AtomPP
- GData
Railsだけを考えるなら、サービス全体をRESTfulにして、HTML以外にXMLも返す様にしておけば、外部から使うのも比較的容易。Rails同士ならActiveResourceも一応使えるし。ただ、Rails以外でクライアントを作るのがメンドクサイ。また、実際問題、HTMLのコントローラとAPI用のコントローラを一緒にするのは難しいケースもあるので、一つのクラスでHTMLもAPIもとはなかなか行かない。
サービスをRESTfulにしてXMLを返すのはいいけど、結局APIは別に用意しなきゃ行けない予感。
2つ目はBlogの編集などで採用されているXML-RPC。ほとんどのBlog engineが採用しているので、APIでの採用率はとても多い。でも、XML-RPCは通信方法の規定だけなので、APIのメソッドについては自分で規定するする必要あり。メソッド名のスタンダードはきちんとしていないため、XML-RPCでAPIを作ってもクライアント側も独自に実装する必要あり。MT互換のAPIとかもできるけど、ダサイ。
本命は3番のAtomPP。MT, WordPressなど、最近のBlog engineでもサポートされている、プロトコル。リソースへのCRUDをAPIとして実装するならかなりいい。ただ検索などのAPIは規定されていないので、この辺については独自で拡張する必要あり。
一番の問題はエラー詳細を返すフォーマットについて規定がないこと。HTTPのレスポンスコードだけで返すと、エラー詳細が分からないんだけど、それを渡す規定がない。あと、FreeSpotなんかで、アクセスすると初回アクセス時にどのページにアクセスしてもログインページなどに飛ばされるようにってるけど、そういう環境では、APIにPOSTして200が帰ってきても、実は届いてなかったという事が考えられる。
そもそも、そういう時には「407 Proxy Authentication Required」とか、別のレスポンスコードを返して欲しいのだけど、実際そうなってないので、なんらかの対策を考える必要がある。XMLのタグかHTTPヘッダで必ずシグニチャーみたいのを入れるとか。
AtomPPのエラー詳細と、ステータスコード、みんなどうしてるのかなぁ。知っている人、情報お願いします。
AtomPPとRSS2.0をベースに拡張したGoogleのAPIフォーマットが4番目のGData。
Googleで使われているAPIなので、現実的なメソッドが用意されている。検索とかエラーとか。ただ、認証方法はGlientLoginかAuthSub。WSSEじゃない。
GDataがいいかなぁ。AtomPPに独自タグを入れるか。まようなぁ。
takemaru
AtomPub のエラー処理について書いたので,よかったら見てみてください.
masuidrive
ありがとうございます。早速読ませていただきます。