Home > Ruby on Rails > レスポンスコードでステータスを判断するとFreeSpotとかで問題にならない?

レスポンスコードでステータスを判断するとFreeSpotとかで問題にならない?

Photo by Paco CT

いま、Sticka用などに外部からデータの更新と参照をするためにWebAPIを計画しているんだけど、WebAPIと一口に言っても、いろいろなプロトコルがあって、どれを採用するかでとても悩み中。

候補になっているのは下記の4つ。

  1. RESTful (Rails)
  2. XML-RPC
  3. AtomPP
  4. 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

masuidrive(増井 雄一郎)
PukiWikiなどのオープンソース活動を経て、2005年からRuby on Railsに的を絞り、WEB2.0社 PingKingやニフティ アバウトミーの開発に関わる。これまでのフリー活動から転身し、2007年は1年だけ会社員として働いた後、起業のため渡米。2008年4月にBig Canvas Inc.設立。現在、米ベルビュー在住。

Comments:2

takemaru 08-04-15 (Tue) 8:53

AtomPub のエラー処理について書いたので,よかったら見てみてください.

masuidrive 08-04-15 (Tue) 13:38

ありがとうございます。早速読ませていただきます。

Comment Form
Remember personal info

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

Home > Ruby on Rails > レスポンスコードでステータスを判断するとFreeSpotとかで問題にならない?

Search
Feeds
Meta

Return to page top