KayのRESTfull APIでデータを追加する

Google App Engine用フレームワークKayを使ったWebアプリケーションに、RESTfull APIを使ってデータを追加する方法を紹介します。

最初に、Kayを使ったWebアプリケーションを作成して、RESTfull APIを使用できるように設定します。

今回の例では、myapp.models.MyModelをRESTfull APIで操作できるようにします。

myapp/models.py

from google.appengine.ext import db

class MyModel(db.Model):
    user_name = db.StringProperty()
    message = db.TextProperty()

myapp/urls.py

from kay.generics.rest import RESTViewGroup

class MyRESTViewGroup(RESTViewGroup):
    models = ['myapp.models.MyModel']

view_groups = [
    MyRESTViewGroup(),
    ViewGroup(
        Rule('/', endpoint='index', view='myapp.views.index'),
    )
]

開発サーバーを起動します。

python manage.py runserver

このWebアプリケーションからRESTfull APIでMyModelの情報を取得するのは簡単です。

MyModelの一覧を取得するコード

# -*- coding: utf-8 -*-
import urllib2
res = urllib2.urlopen('http://localhost:8080/rest/MyModel')
print res.code #=> 200
print res.msg #=> OK
print res.read() #=> MyModelの一覧データ

MyModelの特定のデータを取得するコード

# -*- coding: utf-8 -*-
import urllib2
key = … #モデルのキー
res = urllib2.urlopen('http://localhost:8080/rest/MyModel/%s' % key)
print res.code #=> 200
print res.msg #=> OK
print res.read() #=> モデルのデータ

WebアプリケーションのMyModelに新しいデータを登録します。

データを登録するときのURLは一覧取得の時と同じですが、GETではなくPOSTで送信します。

# -*- coding: utf-8 -*-
import urllib2
req = urllib2.Request('http://localhost:8080/rest/MyModel')

データを登録するには、登録するデータをXML形式で送信します。

xml = '<?xml version="1.0" encoding="UTF-8"?><MyModel><user_name>test</user_name><message>テスト</message></MyModel>'
req.add_data(xml)

リクエストのヘッダにContent-Typeを設定する必要があります。

req.add_header('Content-Type', 'application/xml')

準備が出来たらリクエストを送信します。
登録に成功したら、登録したモデルのキーが返ります。

res = urllib2.urlopen(req)
print res.code #=> 200
print res.msg #=> OK
print res.read() #=> 登録したモデルのキー

登録処理の全体のソースコードは次のようになります。

# -*- coding: utf-8 -*-
import urllib2

req = urllib2.Request('http://localhost:8080/rest/MyModel')

#Content-Typeの設定が必要
req.add_header('Content-Type', 'application/xml')

#登録するデータをXML形式で設定する
xml = '<?xml version="1.0" encoding="UTF-8"?><MyModel><user_name>test</user_name><message>テスト</message></MyModel>'
req.add_data(xml)

res = urllib2.urlopen(req)

print res.code #=> 200
print res.msg #=> OK
print res.read() #=> 登録したモデルのキー

関連ページ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください