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() #=> 登録したモデルのキー