AtomPubな何かを作ってみよう その3 〜実装編 Part.02「単体のAtomPubリソースの動作確認」〜
前回の記事で、簡単なAtomPubのリソースをRailsで実装してみました。今回は、実装したリソースに実際にアクセスしてみたいと思います。
サービス起動
普通にRailsを起動します。
>cd path_to_projects >ruby script/server
デフォルトで3000番ポートで起動するので、"http://localhost:3000/"でアクセスできるようになります。以下、URLは"/"以降のみ記述します。また、レスポンスのヘッダは一部のみ抜粋したものを記述します。
GET /meanings
まずは、"/meanings"に対してGETしてみます。
Status: 200 OK Content-Type: application/atom+xml;type=feed <?xml version="1.0" encoding="UTF-8"?> <feed language="ja" xmlns:app="http://www.w3.org/2007/app" xmlns="http://www.w3.org/2005/Atom"> <id>tag:tom@nadukete.name,2008:meanings</id> <title>単語一覧</title> <author> <name>nadukete.name</name> </author> <updated>2008-12-19T15:13:43+09:00</updated> <link rel="self" href="http://localhost:3000/meanings"/> </feed>
まだ登録データが何も無いので、エントリ無しのフィードが取得されます。
POST /meanings
一つデータを登録してみます。登録するデータは、とりあえずのテストなので、以下のようなシンプルなものにしました。
<?xml version="1.0" encoding="UTF-8"?> <entry> <title>作成する</title> <author> <name>TOM</name> </author> <content>テスト投稿です。</content> </entry>
必要なデータとしては、登録する単語名/投稿者名/投稿者コメントだけというシンプルなAPIです。
Status: 201 Created Location: http://localhost:3000/meanings/%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B Content-Type: application/xml; charset=utf-8 <?xml version="1.0" encoding="UTF-8"?> <entry language="ja" xmlns:app="http://www.w3.org/2007/app" xmlns="http://www.w3.org/2005/Atom"> <id>tag:tom@nadukete.name,2008:meanings/4</id> <updated>2008-12-19T15:17:51+09:00</updated> <author> <name>TOM</name> </author> <title>作成する</title> <content type="text">テスト投稿です。</content> <link rel="edit" href="http://localhost:3000/meanings/%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B"/> </entry>
ちゃんと登録できましたね。
…と、確認をしていて気付いたんですが、レスポンスボディに投稿された内容を返すようにしているのに、"Content-Type"が"application/atom+xml;type=entry"になってないですね…。後で直そう…。
ちなみに、確認中にちょっとハマってしまったんですが、リクエストヘッダに"Content-Type: application/atom+xml;type=entry"を入れておかないといけないので注意です。この辺は、AtomPubクライアントであれば考慮されていると思いますが、一般のHTTPクライアントを使ったり、自前でAPIにアクセスするプログラムを書く時は注意が必要ですね。(そんなの常識なのかもしれませんが…。(^^;)
GET /meanings/作成する
一応、作成された記事内容がGETできるかどうか確認してみます。*1
Status: 200 OK Content-Type: application/atom+xml;type=entry <?xml version="1.0" encoding="UTF-8"?> <entry language="ja" xmlns:app="http://www.w3.org/2007/app" xmlns="http://www.w3.org/2005/Atom"> <id>tag:tom@nadukete.name,2008:meanings/4</id> <updated>2008-12-19T15:17:51+09:00</updated> <author> <name>TOM</name> </author> <title>作成する</title> <content type="text">テスト投稿です。</content> <link rel="edit" href="http://localhost:3000/meanings/%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B"/> </entry>
ちゃんとエントリ一つ分が取得できました。
PUT /meanings/作成する
続いて、エントリの内容を書き換えてみましょう。上記のGETで取得した内容のコメント内容だけ書き換えたものをBODYにして、PUTしてみます。書き換え後のコメント内容は"コメント更新テストです。"にしてみましょう。
Status: 200 OK Location: http://localhost:3000/meanings/%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B Content-Type: application/xml; charset=utf-8 <?xml version="1.0" encoding="UTF-8"?> <entry language="ja" xmlns:app="http://www.w3.org/2007/app" xmlns="http://www.w3.org/2005/Atom"> <id>tag:tom@nadukete.name,2008:meanings/4</id> <updated>2008-12-19T15:42:46+09:00</updated> <author> <name>TOM</name> </author> <title>作成する</title> <content type="text">コメント更新テストです。</content> <link rel="edit" href="http://localhost:3000/meanings/%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B"/> </entry>
ちゃんとコメント部分が置き換わってますね。ただ、これもContent-Typeヘッダがよろしくないですね。(^^;ゞ ここも修正点と…。
DELETE /meanings/作成する
では、作成したエントリを削除してみましょう。
Status: 200 OK Content-Type: text/html; charset=utf-8
ちゃんと削除できたようです。
エントリのURLに対してGETすると"404 Not Found"が返ってくる事が確認できます。