- 2008-04-15 (Tue) 2:42
- Ruby on Rails
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に独自タグを入れるか。まようなぁ。
Related posts
- Newer: Apache(mod_rails)とmongrelでHTTPレスポンスヘッダに特定の値を返す
- Older: Amazon EC2でインスタンスを終了しても消えないディスク領域を年内にリリース
Comments:2
- takemaru 08-04-15 (Tue) 8:53
-
AtomPub のエラー処理について書いたので,よかったら見てみてください.
- masuidrive 08-04-15 (Tue) 13:38
-
ありがとうございます。早速読ませていただきます。
Trackbacks:0
- Trackback URL for this entry
- http://blog.masuidrive.jp/index.php/2008/04/15/whats-api-protocol-your-web-servic/trackback/
- Listed below are links to weblogs that reference
- レスポンスコードでステータスを判断するとFreeSpotとかで問題にならない? from @masuidrive blog