スキーマを登録したら、いよいよJavaScriptを使って画面からサーバに任意のデータを登録します。
ここではjQueryを使用し、Ajaxによるデータ登録の方法を記します。
vte.cxのデータ構造と階層
まずはデータ登録を行う前に、vte.cxではどのようなデータ管理を行っているのか、その仕組みを見ていきましょう。
vte.cxのデータにアクセスするURLパスは、「/d/hoge」というのが基本の形になります。
/dはデータにアクセスするためのAPIと考えてください。
「/d」としているのは対象がリソースデータであることを示す意味があります。
https://{自分のサービス}.vte.cx/d/hoge ← hogeのデータにアクセスできる
/d以外にも、「/s/hoge」とすればサーバサイドJavaScriptにアクセスできたり、「/x/hoge」とすればexcel変換を行うAPIにアクセスできたりします。
デフォルトで登録してあるデータ
自分で作成したサービスにはデフォルトで以下のデータが登録されています。
https://{自分のサービス}.vte.cx
/d ← データを格納しているAPI
/_group ← グループ(管理者グループ等を含む)を管理している階層
/_html ← デプロイしたHTMLやJSやCSSなどのコンテンツを管理している階層
/_log ← ログを管理している階層
/_settings ← 設定情報を管理している階層
/{uid} ← ユーザ情報および配下にユーザ管理のデータを管理している階層
これらはサービスを管理するために必要なデータ群です。上記のようにシステムがデフォルトでもつものには先頭に「_(アンダーバー)」が付いています。
uidについて
「uid」というのは登録ユーザに自動で振り分けられる識別子です。
自分で作成したサービスに登録者が増える度に、その登録者にはuidが振られ、「/d」に自動登録されます。
ttitle項目にそのユーザのメールアドレスが入りますので、どのユーザにどのuidが振られているかが確認できます。
また、uidはサービスを作成した管理者にも例外なく振り分けられます。
<feed>
<entry>
<id>/34,2</id>
<link href="/34" rel="self"/>
<published>2015-11-30T19:22:36.354+09:00</published>
<summary>Activated</summary>
<title>hoge@foo.com</title> ← hoge@foo.comには「34」のuidが振られている
<updated>2015-11-30T19:22:36.380+09:00</updated>
</entry>
</feed>
データの形式はATOMによって表現されます
vtec.cxのデータはATOM(RFC4287)によって表現されます。
XMLやJSON、MessagePackなどに変換できます。
feedについて
データはリスト形式でfeedの中に複数のentryが入る形になります。
<feed>
<entry>
...
</entry>
<entry>
...
</entry>
... { n個 }
</feed>
entryについて
リソースの最小単位であり、1件のデータが1Entryになります。
Entryは一つのidを持ちます。これは、システム全体で一意となるように、KeyとRevisionを組み合わせた形をしています。
タグの値には、Entryの実体を示す一意の値(Key,Revision)が入ります。
RevisionはEntryの更新回数です。
<feed>
<entry> ← 1件のデータ情報
<title>データ1</title>
<id>/hoge,1</id> ← 更新の度に「1」からカウントアップします。
</entry>
<entry>
<title>データ2</title>
<id>/foo,4</id> ← データ2は3回の更新がありました。
</entry>
</feed>
デフォルトデータを取得してみる
以下のリンクを画面で開いてみてください。
(開くには自分のサービスにログインする必要があります。)
https://{自分のサービス}.vte.cx/d/?f&x
そうすると画面にATOM形式のXML変換されたデータが取得できます。
<feed>
<entry>
<author>
<uri>urn:vte.cx:created:17</uri>
</author>
<id>/_group,1</id>
<link href="/_group" rel="self"/>
<published>2015-11-30T19:22:36.166+09:00</published>
<updated>2015-11-30T19:22:36.166+09:00</updated>
</entry>
<entry>
....
</entry>
....
</feed>
今のURLについて解説します。
これがアクセスするURLです。GETすることで/dへの参照となります。
https://{自分のサービス}.vte.cx/d/ ← 末尾にある「/」は省略しないでください。
それにURLパラメータを付与します。
?f ← これは「/d」の配下にあるデータを取得する命令です。
?x ← これは取得するデータをXML形式に変換する命令です。
以上を組み合わせると上記のデータを取得できます。
各デフォルトデータにアクセスするURL
システムのデータにアクセスしたい時はそれぞれ以下のURLになります。
https://{自分のサービス}.vte.cx/d/_group?f&x
https://{自分のサービス}.vte.cx/d/_html?f&x
https://{自分のサービス}.vte.cx/d/_log?f&x
https://{自分のサービス}.vte.cx/d/_settings?f&x
https://{自分のサービス}.vte.cx/d/{uid(数値)}?f&x
/_groupなどにアクセスできるユーザ権限
/dの直下で先頭に「_(アンダーバー)」が付いているデータ には管理者権限がなければアクセスすることができません。
それ以外は「403 Access denied.」もしくは「401 Authentication error.」エラーとなります。
1.登録データを準備する
前置きが長くなってしまいましたが、ここからが本題です。
jQueryでサーバにデータ登録を行っていきましょう。
まずは登録するデータを準備します。
jQueryでデータを扱う際は、一般的にはJSON形式です。
なので、以下のようなデータを準備します。
{
userinfo: {
id: 12345,
email: hoge@foo.com
},
favorite: {
food: 'りんご',
music: 'J-POP'
},
hobby: [
{
type: '屋外',
name: 'なわとび',
updated: 2015/12/04
},
{
type: '屋内',
name: 'ゲーム',
updated: 2015/09/01
}
]
}
2.登録データをfeed形式に整形する
前述したようにvte.cxはデータの形式にATOM形式を採用しています。
サーバー用のデータにするために、feed形式にします。
以下のような形になります。
{
feed: {
entry: [
{
userinfo: {
id: 12345,
email: hoge@foo.com
},
favorite: {
food: 'りんご',
music: 'J-POP'
},
hobby: [
{
type: '屋外',
name: 'なわとび',
updated: 2015/12/04
},
{
type: '屋内',
name: 'ゲーム',
updated: 2015/09/01
}
]
}
]
}
}
第一階層にfeedがあり、その配下にentryが入ります。entryの型は配列です。
entryの中に登録データを格納します。これでfeed形式に整形できました。
entryの型が配列になっている理由は、複数のデータを同時に登録するためです。
例えば以下のようなデータにすると、複数のデータを同時に登録できます。
{
feed: {
entry: [
{
userinfo: {
id: 12345,
email: hoge@foo.com
},
favorite: {
food: 'りんご',
music: 'J-POP'
}
},
{
userinfo: {
id: 98765,
email: bor@foo.com
},
favorite: {
food: 'バナナ'
}
}
]
}
}
3.ajaxで登録データをPOSTする
上記データをjQueryのajax通信を使用し、POSTリクエストを実行します。
基本設計は以下の通りです。
var request = {feed: {entry: [{userinfo: {id: 12345,email: hoge@foo.com},favorite: {food: 'りんご',music: 'J-POP'},hobby: [{type: '屋外',name: 'なわとび',updated: 2015/12/04},{type: '屋内',name: 'ゲーム',updated: 2015/09/01}]}]}};;
$.ajax({
url: '/d/{自分のuid}',
method: 'post',
dataType: 'json',
data: JSON.stringify(request)
}).done(function(res) {
alert('登録成功');
}).fail(function( jqXHR, textStatus, errorThrown ) {
alert('登録失敗');
});
■リクエスト
param | 値 | 例 |
---|---|---|
url | 登録先URL | /d/{自分のuid} |
method | POST | |
dataType | json | |
data | 登録データ | 上記参照 |
登録データは文字列化してからリクエストします。
ですので、paramのdataに値を代入する際に、requestをJSON.stringifyを使用し文字列化しています。
uidの取得方法
以下のURLを画面で開いてください。すると自分のuidが取得できます。
※uidを取得するにはログインが必要です。
https://{自分のサービス}/d/?_uid
レスポンス
{'feed': {'title': (uid)}}}
取得したuidをurlに使用してください。
■レスポンス
成功ステータス
ステータス | メッセージ | レスポンス |
---|---|---|
201 | Created | {"feed" : {"title" : "/{uid}/{登録entryのキー}"}} |
レスポンス例
{"feed" : {"title" : "/34/0-8-2-9-1-1-2"}}
feedのtitleにあるurlが登録データのurlになります。
例えば以下のようにすると登録データにアクセスできます。
https://{自分のサービス}/d/34/0-8-2-9-1-1-2?x
失敗ステータス
以下の仕様書の下部に細かく記載されています。ステータスコードに沿って正しいデータを登録してみてください。
HTTPステータス一覧
終わりに
以上でデータをサーバに登録する説明を終わります。
次回はjQueryを使用したデータの取得方法についてです。