SlideShare ist ein Scribd-Unternehmen logo
1 von 86
Downloaden Sie, um offline zu lesen
Shibuya, Tokyo
Wakanda
勉強会 #3
2013-08-20
presented by
Shibuya, Tokyo
.../Executing-Code-on-the-Server.300-575371.ja.html
agenda
remote procedure call
Shibuya, Tokyo
.../Executing-Code-on-the-Server.300-575371.ja.html
agenda
remote procedure call
JSON-RPC HttpRequestHandler Datastore
タイプ サービス リクエストハンドラー クラスメソッド
再起動不要 no yes no
クライアント JavaScript HTTP JavaScript
Shibuya, Tokyo
.../Executing-Code-on-the-Server.300-575371.ja.html
JSON-RPC
remote procedure call
JSON-RPC HttpRequestHandler Datastore
タイプ サービス リクエストハンドラー クラスメソッド
再起動不要 no yes no
クライアント JavaScript HTTP JavaScript
Shibuya, Tokyo
.../About-JSON-RPC-Services-in-Wakanda.300-306542.ja.html
JSON-RPC
wakanda application framework
browsers server
NoSQL object datastore
+
web server
+
Server Side JavaScript
client Side JavaScript
+
WAF: datasource (widgets)
+
WAF: dataprovider (REST)
Shibuya, Tokyo
.../About-JSON-RPC-Services-in-Wakanda.300-306542.ja.html
JSON-RPC
wakanda application framework
browsers server
NoSQL object datastore
+
web server
+
Server Side JavaScript
client Side JavaScript
+
WAF: datasource (widgets)
+
WAF: dataprovider (REST)
Shibuya, Tokyo
.../About-JSON-RPC-Services-in-Wakanda.300-306542.ja.html
JSON-RPC
no framework
browsers server
NoSQL object datastore
+
web server
+
Server Side JavaScript
client Side JavaScript
Shibuya, Tokyo
.../About-JSON-RPC-Services-in-Wakanda.300-306542.ja.html
JSON-RPC
no framework
browsers server
NoSQL object datastore
+
web server
+
Server Side JavaScript
client Side JavaScript
Shibuya, Tokyo
.../About-JSON-RPC-Services-in-Wakanda.300-306542.ja.html
JSON-RPC
remote procedure call
browsers server
NoSQL object datastore
+
web server
+
Server Side JavaScript
client Side JavaScript
JSON-RPC
http://en.wikipedia.org/wiki/JSON-RPC
Shibuya, Tokyo
.../About-JSON-RPC-Services-in-Wakanda.300-306542.ja.html
JSON-RPC
remote procedure call
browsers server
NoSQL object datastore
+
web server
+
Server Side JavaScript
client Side JavaScript
JSON-RPC
http://en.wikipedia.org/wiki/JSON-RPC
{"method": "echo", "params":
["Hello JSON-RPC"], "id": 1}
Shibuya, Tokyo
.../About-JSON-RPC-Services-in-Wakanda.300-306542.ja.html
JSON-RPC
remote procedure call
browsers server
NoSQL object datastore
+
web server
+
Server Side JavaScript
client Side JavaScript
JSON-RPC
http://en.wikipedia.org/wiki/JSON-RPC
{"method": "echo", "params":
["Hello JSON-RPC"], "id": 1}
{"result": "Hello JSON-RPC",
"error": null, "id": 1}
Shibuya, Tokyo
.../About-JSON-RPC-Services-in-Wakanda.300-306542.ja.html
JSON-RPC
remote procedure call
browsers server
NoSQL object datastore
+
web server
+
Server Side JavaScript
client Side JavaScript
JSON-RPC
http://en.wikipedia.org/wiki/JSON-RPC
commonJS
http://www.commonjs.org/
Shibuya, Tokyo
commonJS
場所: {projectFolder}/Modules/myRPC.JS (サブフォルダーでも良い)
構成: 1 file/module, n functions/module
javascript: not just for browsers any more!
http://www.commonjs.org/specs/modules/1.0/
戻り値: 必須 (null, ""でも良い)
アクセス権: module毎, function毎
JSON-RPC
.../Configuring-CommonJS-Modules-for-RPC.300-306585.ja.html
Shibuya, Tokyo
.../Configuring-CommonJS-Modules-for-RPC.300-306585.ja.html
commonJS
regular
function add (a, b) {
          return (a + b);
}
exports.add = function add (a, b) {
          return (a + b);
};
commonJS
JSON-RPC
Shibuya, Tokyo
.../Configuring-CommonJS-Modules-for-RPC.300-306585.ja.html
commonJS
var notExposedVar = 'foo';
exports.CONSTANT_1 = 'hello';
exports.add = function add (a, b) {
          return (a + b);
};
Modules/myRPC.js
notExposedVarはエクスポートされない
【参考】
JSON-RPC
Shibuya, Tokyo
.../Configuring-CommonJS-Modules-for-RPC.300-306585.ja.html
commonJS
require('myRPC').add();
他のサーバーサイドJavaScriptからモジュールを呼び出すとき
var notExposedVar = 'foo';
exports.CONSTANT_1 = 'hello';
exports.add = function add (a, b) {
          return (a + b);
};
Modules/myRPC.js
【参考】
JSON-RPC
Shibuya, Tokyo
Configuring-CommonJS-Modules-for-RPC.300-306585.ja.html
JSON-RPC
Shibuya, Tokyo
Configuring-CommonJS-Modules-for-RPC.300-306585.ja.html
JSON-RPC
Shibuya, Tokyo
Configuring-CommonJS-Modules-for-RPC.300-306585.ja.html
JSON-RPC
Shibuya, Tokyo
Configuring-CommonJS-Modules-for-RPC.300-306585.ja.html
JSON-RPC
Shibuya, Tokyo
Configuring-CommonJS-Modules-for-RPC.300-306585.ja.html
JSON-RPC
Shibuya, Tokyo
Configuring-CommonJS-Modules-for-RPC.300-306585.ja.html
JSON-RPC
Shibuya, Tokyo
Configuring-CommonJS-Modules-for-RPC.300-306585.ja.html
JSON-RPC
Shibuya, Tokyo
Configuring-CommonJS-Modules-for-RPC.300-306585.ja.html
JSON-RPC
Shibuya, Tokyo
Configuring-CommonJS-Modules-for-RPC.300-306585.ja.html
JSON-RPC
Shibuya, Tokyo
Configuring-CommonJS-Modules-for-RPC.300-306585.ja.html
JSON-RPC
Shibuya, Tokyo
.../Configuring-CommonJS-Modules-for-RPC.300-306585.ja.html
Set as RPC
<?xml version="1.0" encoding="UTF-8"?>
<permissions>
<allow type="module" resource="myRPC" action="executeFromClient"/>
</permissions>
{projectFolder}/permissions.waPerm
JSON-RPC
Shibuya, Tokyo
.../Assigning-Group-Permissions.200-725897.ja.html
permission
attribute value remarks
type
module
funtion
resource
modulePath
modulePath/funtionName
action
executeFromClient
promote
promote: アクセス権を昇格して実行
groupID group UUID default: no authentication
JSON-RPC
Shibuya, Tokyo
.../Assigning-Group-Permissions.200-725897.ja.html
JSON-RPC
Shibuya, Tokyo
.../Assigning-Group-Permissions.200-725897.ja.html
JSON-RPC
Shibuya, Tokyo
.../Assigning-Group-Permissions.200-725897.ja.html
{projectFolder}/{projectName}/.waSettings
publish
<?xml version="1.0" encoding="UTF-8"?>
<settings>
<project/>
<http/>
<service name="webApp" modulePath="services/webApp" enabled="true"
autoStart="true"/>
<service name="rpc" modulePath="services/rpc" enabled="true" autoStart="true"
proxyPattern="^/rpc-proxy/" publishInClientGlobalNamespace="false"/>
<service name="dataStore" modulePath="services/dataStore" enabled="true"
autoStart="true"/>
<service name="upload" modulePath="services/upload" enabled="true"
autoStart="true"/>
<service name="Git HTTP Service" modulePath="services/waf-git/waf-GitService"
enabled="true"/>
<resources/>
<javaScript/>
</settings>
JSON-RPC
Shibuya, Tokyo
.../Assigning-Group-Permissions.200-725897.ja.html
{projectFolder}/{projectName}/.waSettings
publish
<?xml version="1.0" encoding="UTF-8"?>
<settings>
<project/>
<http/>
<service name="webApp" modulePath="services/webApp" enabled="true"
autoStart="true"/>
<service name="rpc" modulePath="services/rpc" enabled="true" autoStart="true"
proxyPattern="^/rpc-proxy/" publishInClientGlobalNamespace="false"/>
<service name="dataStore" modulePath="services/dataStore" enabled="true"
autoStart="true"/>
<service name="upload" modulePath="services/upload" enabled="true"
autoStart="true"/>
<service name="Git HTTP Service" modulePath="services/waf-git/waf-GitService"
enabled="true"/>
<resources/>
<javaScript/>
</settings>
JSON-RPC
Shibuya, Tokyo
Configuring-CommonJS-Modules-for-RPC.300-306585.ja.html
JSON-RPC
Shibuya, Tokyo
Configuring-CommonJS-Modules-for-RPC.300-306585.ja.html
JSON-RPC
Shibuya, Tokyo
.../Configuring-CommonJS-Modules-for-RPC.300-306585.ja.html
namespace
index.waPage/index.html
<meta name="WAF.config.rpc.file" content="rpc-proxy/myRPC?namespace=myRPC"/>
<script type="text/javascript" src="/rpc-proxy/myRPC?namespace=myRPC">
</script>
any html
デフォルト名前空間: RPCモジュール.jsのファイル名
JSON-RPC
Shibuya, Tokyo
.../Configuring-CommonJS-Modules-for-RPC.300-306585.ja.html
namespace
syntax#1
var mathTools = {
    sine : function () {},
    cos : function () {},
    atan : function () {}
};
var mathTools = {};
mathTools.sine= function () {};
mathTools.cos = function () {};
mathTools.atan = function () {};
syntax#2
【参考】
JSON-RPC
Shibuya, Tokyo
Configuring-CommonJS-Modules-for-RPC.300-306585.ja.html
JSON-RPC
Shibuya, Tokyo
.../Calling-Methods-from-the-Client-Side.300-306631.ja.html
button1.click = function button1_click (event)
synchronous call
try {
{
var a = $$('textField1').getValue();
var b = $$ ('textField2').getValue();
var result = myRPC.add(a,b);
$$('richText1').setValue(result);
}catch (e) {
console.log(e.message);
}
JSON-RPC
Shibuya, Tokyo
.../Using-JSON-RPC-Services/Error-Handling.300-306655.ja.html
button1.click = function button1_click (event)
try {
{
var a = $$('textField1').getValue();
var b = $$ ('textField2').getValue();
var result = myRPC.add(a,b);
$$('richText1').setValue(result);
} catch (e) {
console.log(e.message);
}
e.code: エラーコード
e.message: エラーメッセージ
error handling
JSON-RPC
Shibuya, Tokyo
.../Using-JSON-RPC-Services/Error-Handling.300-306655.ja.html
error handling
code message remarks
-32601 Method not found
-32603 Internal error while... throw: カスタムエラー
JSON-RPC
Shibuya, Tokyo
.../Using-JSON-RPC-Services/Error-Handling.300-306655.ja.html
button1.click = function button1_click (event)
try {
{
var a = $$('textField1').getValue();
var b = $$ ('textField2').getValue();
var result = myRPC.add(a,b);
$$('richText1').setValue(result);
} catch (e) {
console.log(e.message);
}
e.code: エラーコード
e.message: エラーメッセージ
error handling
JSON-RPC
Shibuya, Tokyo
.../Using-JSON-RPC-Services/Error-Handling.300-306655.ja.html
try {
{
var a = $$('textField1').getValue();
var b = $$ ('textField2').getValue();
var result = myRPC.add(a,b);
$$('richText1').setValue(result);
} catch (e) {
console.log(e.data);
}
e.code: エラーコード
e.message: エラーメッセージ
error handling
e.data: エラーメッセージオブジェクト
button1.click = function button1_click (event)
JSON-RPC
Shibuya, Tokyo
.../Using-JSON-RPC-Services/Error-Handling.300-306655.ja.html
Modules/myRPC.js
exports.add = function add (a, b) {
" if ((a.length) && (b.length))
         return (a + b);
" else
" " throw new UserException("Arguments can't be empty.", 1);
};
function UserException(message, code) {
this.moduleName = "myRPC";
this.message = message;
this.code = code;
};
error handling
JSON-RPC
Shibuya, Tokyo
.../Calling-Methods-from-the-Client-Side.300-306631.ja.html
button1.click = function button1_click (event)
synchronous call
try {
{
var a = $$('textField1').getValue();
var b = $$ ('textField2').getValue();
var result = myRPC.add(a,b);
$$('richText1').setValue(result);
}catch (e) {
console.log(e.message);
}
JSON-RPC
Shibuya, Tokyo
.../Calling-Methods-from-the-Client-Side.300-306631.ja.html
button1.click = function button1_click (event)
asynchronous call
{
myRPC.addAsync(
" function (result) {$$('richText1').setValue(result);}, $$
('textField1').getValue(), $$('textField2').getValue());
}
JSON-RPC
Shibuya, Tokyo
.../Calling-Methods-from-the-Client-Side.300-306631.ja.html
button1.click = function button1_click (event)
asynchronous call
{
myRPC.addAsync(
" function (result) {$$('richText1').setValue(result);}, $$
('textField1').getValue(), $$('textField2').getValue());
}
Async: 非同期モードRPCのsuffix
JSON-RPC
Shibuya, Tokyo
.../Calling-Methods-from-the-Client-Side.300-306631.ja.html
button1.click = function button1_click (event)
asynchronous call
{
myRPC.addAsync(
" function (result) {$$('richText1').setValue(result);}, $$
('textField1').getValue(), $$('textField2').getValue());
}
コールバックメソッド(成功時のみ)
Async: 非同期モードRPCのsuffix
JSON-RPC
Shibuya, Tokyo
.../Calling-Methods-from-the-Client-Side.300-306631.ja.html
button1.click = function button1_click (event)
asynchronous call
{
myRPC.addAsync(
" function (result) {$$('richText1').setValue(result);}, $$
('textField1').getValue(), $$('textField2').getValue());
}
コールバックメソッド(成功時のみ)
Async: 非同期モードRPCのsuffix
パラメーター(そのまま列挙)
JSON-RPC
Shibuya, Tokyo
.../Calling-Methods-from-the-Client-Side.300-306631.ja.html
button1.click = function button1_click (event)
asynchronous call
{
var result = myRPC.addAsync({
'onSuccess': function (result) {
$$('richText1').setValue(result);
},
'onError': function (error) {
console.log(e.data);
}," "
'params': [$$('textField1').getValue(), $$('textField2').getValue()]
});
}
JSON-RPC
Shibuya, Tokyo
.../Calling-Methods-from-the-Client-Side.300-306631.ja.html
button1.click = function button1_click (event)
asynchronous call
{
var result = myRPC.addAsync({
'onSuccess': function (result) {
$$('richText1').setValue(result);
},
'onError': function (error) {
console.log(e.data);
}," "
'params': [$$('textField1').getValue(), $$('textField2').getValue()]
});
}
コールバックメソッド(成功時,失敗時)
JSON-RPC
Shibuya, Tokyo
.../Calling-Methods-from-the-Client-Side.300-306631.ja.html
button1.click = function button1_click (event)
asynchronous call
{
var result = myRPC.addAsync({
'onSuccess': function (result) {
$$('richText1').setValue(result);
},
'onError': function (error) {
console.log(e.data);
}," "
'params': [$$('textField1').getValue(), $$('textField2').getValue()]
});
}
パラメーター(配列)
コールバックメソッド(成功時,失敗時)
JSON-RPC
Shibuya, Tokyo
.../Using-JSON-RPC-Services/Error-Handling.300-306655.ja.html
synchronous call
JSON-RPC
Shibuya, Tokyo
.../Configuring-CommonJS-Modules-for-RPC.300-306585.ja.html
namespace
index.waPage/index.html
<meta name="WAF.config.rpc.file" content="rpc-proxy/myRPC?namespace=myRPC"/>
<script type="text/javascript" src="/rpc-proxy/myRPC?namespace=myRPC">
</script>
any html
デフォルト名前空間: RPCモジュール.jsのファイル名
JSON-RPC
Shibuya, Tokyo
.../Configuring-CommonJS-Modules-for-RPC.300-306585.ja.html
namespace
index.waPage/index.html
<meta name="WAF.config.rpc.file" content="rpc-proxy/myRPC?namespace=myRPC"/>
<script type="text/javascript" src="/rpc-proxy/myRPC?namespace=myRPC">
</script>
any html
デフォルト名前空間: RPCモジュール.jsのファイル名
JSON-RPC
Shibuya, Tokyo
.../Using-JSON-RPC-Services/Error-Handling.300-306655.ja.html
plain.html
<!DOCTYPE html>
<html>
<head>
<title>plain</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
" " <script type="text/javascript" src="/rpc-proxy/myRPC?namespace=myRPC"></script>
</head>
<body>
<h1>
" " " <input type="text" id="textInput1" value="Hello " ></input>
" " " <input type="text" id="textInput2" value="World!! " ></input>
" " " <button onclick="document.getElementById('textInput3').value =
myRPC.add(document.getElementById('textInput1').value,
document.getElementById('textInput2').value);">myRPC.add()</button>
" " " <input type="text" id="textInput3" readOnly="true" ></input>
</h1>
</body>
</html>
synchronous call
JSON-RPC
Shibuya, Tokyo
.../Using-JSON-RPC-Services/Error-Handling.300-306655.ja.html
plain.html
<!DOCTYPE html>
<html>
<head>
<title>plain</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
" " <script type="text/javascript" src="/rpc-proxy/myRPC?namespace=myRPC"></script>
</head>
<body>
<h1>
" " " <input type="text" id="textInput1" value="Hello " ></input>
" " " <input type="text" id="textInput2" value="World!! " ></input>
" " " <button onclick="document.getElementById('textInput3').value =
myRPC.add(document.getElementById('textInput1').value,
document.getElementById('textInput2').value);">myRPC.add()</button>
" " " <input type="text" id="textInput3" readOnly="true" ></input>
</h1>
</body>
</html>
synchronous call
JSON-RPC
Shibuya, Tokyo
.../Using-JSON-RPC-Services/Error-Handling.300-306655.ja.html
synchronous call
JSON-RPC
Shibuya, Tokyo
.../Executing-Code-on-the-Server.300-575371.en.html
remote procedure call
JSON-RPC HttpRequestHandler Datastore
タイプ サービス リクエストハンドラー クラスメソッド
再起動不要 no yes no
クライアント JavaScript HTTP JavaScript
HTTP request handler
Shibuya, Tokyo
.../Executing-Code-on-the-Server.300-575371.en.html
HTTP request handler
remote procedure call
JSON-RPC HttpRequestHandler Datastore
タイプ サービス リクエストハンドラー クラスメソッド
再起動不要 no yes no
クライアント JavaScript HTTP JavaScript
Shibuya, Tokyo
.../HTTP/HTTP.200-803294.ja.html
HTTP request handler
browsers server
NoSQL object datastore
+
web server
+
Server Side JavaScript
client Side JavaScript
no framework
Shibuya, Tokyo
.../HTTP/HTTP.200-803294.ja.html
HTTP request handler
browsers server
NoSQL object datastore
+
web server
+
Server Side JavaScript
HTTP client
no JavaScript
Shibuya, Tokyo
.../HTTP/HTTP.200-803294.ja.html
HTTP request handler
browsers server
NoSQL object datastore
+
web server
+
Server Side JavaScript
HTTP client
no server restart
Shibuya, Tokyo
.../Global-Application/Application/addHttpRequestHandler.301-636268.ja.html
HTTP request handler
addHttpRequestHandler(
'(?i)^/demo$',
'myRequestHandler.js',
'do_demo'
);
add handler
Shibuya, Tokyo
.../Global-Application/Application/addHttpRequestHandler.301-636268.ja.html
HTTP request handler
addHttpRequestHandler(
'(?i)^/demo$',
'myRequestHandler.js',
'do_demo'
);
リクエストURLパターン: ICU正規表現
add handler
http://www.icu-project.org/userguide/regexp.html
Shibuya, Tokyo
.../Global-Application/Application/addHttpRequestHandler.301-636268.ja.html
HTTP request handler
addHttpRequestHandler(
'(?i)^/demo$',
'myRequestHandler.js',
'do_demo'
);
リクエストURLパターン: ICU正規表現
add handler
ファイル名
Shibuya, Tokyo
.../Global-Application/Application/addHttpRequestHandler.301-636268.ja.html
HTTP request handler
addHttpRequestHandler(
'(?i)^/demo$',
'myRequestHandler.js',
'do_demo'
);
リクエストURLパターン: ICU正規表現
add handler
関数名
ファイル名
Shibuya, Tokyo
.../Introduction-to-HTTP-Request-Handlers.200-803294.ja.html
HTTP request handler
Shibuya, Tokyo
.../Introduction-to-HTTP-Request-Handlers.200-803294.ja.html
HTTP request handler
Shibuya, Tokyo
.../Introduction-to-HTTP-Request-Handlers.200-803294.ja.html
HTTP request handler
function do_demo(request, response) {
return "Hello world";
}
handler function
Shibuya, Tokyo
.../HTTP-Request-Handlers/HTTPRequest.201-803366.ja.html
HTTP request handler
HTTPRequest
body- String | Image | Blob requestLine- String isSSL- Boolean
contentType- String url- String
method- String rawURL- String parts- MIMEMessage
host- String urlPath- String headers- HTTPRequestHeader
version- String urlQuery- String
user- String remoteAddress - String remotePort- Number
password- String localAddress- String localPort- Number
Shibuya, Tokyo
.../HTTP-Request-Handlers/HTTPResponse.201-805902.ja.html
HTTP request handler
HTTPResponse
body- String | Image | Blob requestLine- String isSSL- Boolean
contentType- String url- String
method- String rawURL- String parts- MIMEMessage
host- String urlPath- String headers- HTTPRequestHeader
version- String urlQuery- String statusCode- Number
user- String remoteAddress - String remotePort- Number
password- String localAddress- String localPort- Number
allowCache() allowCompression()
Shibuya, Tokyo
.../Executing-Code-on-the-Server.300-575371.en.html
remote procedure call
JSON-RPC HttpRequestHandler Datastore
タイプ サービス リクエストハンドラー クラスメソッド
再起動不要 no yes no
クライアント JavaScript HTTP JavaScript
datastore class method
Shibuya, Tokyo
.../Using-Datastore-Class-Methods.200-878615.ja.html
remote procedure call
JSON-RPC HttpRequestHandler Datastore
タイプ サービス リクエストハンドラー クラスメソッド
再起動不要 no yes no
クライアント JavaScript HTTP JavaScript
datastore class method
Shibuya, Tokyo
.../Using-Datastore-Class-Methods.200-878615.ja.html
datastore class method
Shibuya, Tokyo
.../Using-Datastore-Class-Methods.200-878615.ja.html
datastore class method
Shibuya, Tokyo
.../Using-Datastore-Class-Methods.200-878615.ja.html
datastore class method
Shibuya, Tokyo
.../Using-Datastore-Class-Methods.200-878615.ja.html
datastore class method
Shibuya, Tokyo
.../Using-Datastore-Class-Methods.200-878615.ja.html
scope
client server derived class class
public OK OK OK OK
public on server OK OK OK
protected OK OK
private OK
datastore class method
Shibuya, Tokyo
.../Using-Datastore-Class-Methods.200-878615.ja.html
datasource
index.waPage/index.html
var result = sources.myClass.myMethod();
datastore class method
dataSource名の大文字/小文字に注意
Shibuya, Tokyo
.../Using-Datastore-Class-Methods.200-878615.ja.html
dataprovider
index.waPage/index.html
datastore class method
var result =ds.MyClass.myMethod();
class名の大文字/小文字に注意
Shibuya, Tokyo
.../Using-Datastore-Class-Methods.200-878615.ja.html
datastore class method
datasource/dataprovider
Shibuya, Tokyo
.../HTTP-REST/Manipulating-Data/datastoreClassmethod.303-814342.ja.html
REST
GET http://127.0.0.1:8081/rest/MyClass/myMethod
POST http://127.0.0.1:8081/rest/MyClass/myMethod
datastore class method
Shibuya, Tokyo
.../HTTP-REST/Manipulating-Data/datastoreClassmethod.303-814342.ja.html
REST
GET http://127.0.0.1:8081/rest/MyClass/myMethod
POST http://127.0.0.1:8081/rest/MyClass/myMethod
datastore class method
class, method名の大文字/小文字に注意
Shibuya, Tokyo
.../HTTP-REST/Manipulating-Data/datastoreClassmethod.303-814342.ja.html
datastore class method
REST
GET http://127.0.0.1:8081/rest/MyClass/myMethod(a,b,c)
POST http://127.0.0.1:8081/rest/MyClass/myMethod
body: [a,b,c]
Shibuya, Tokyo
.../HTTP-REST/Manipulating-Data/datastoreClassmethod.303-814342.ja.html
datastore class method
REST
GET http://127.0.0.1:8081/rest/MyClass/myMethod(a,b,c)
POST http://127.0.0.1:8081/rest/MyClass/myMethod
body: [a,b,c]
{"result":"abc"}
Shibuya, Tokyo
Wakanda
勉強会 #3
2013-08-20
presented by

Weitere ähnliche Inhalte

Andere mochten auch

Increasing Relevance, Relationships, and Results: Principles and Practices fo...
Increasing Relevance, Relationships, and Results: Principles and Practices fo...Increasing Relevance, Relationships, and Results: Principles and Practices fo...
Increasing Relevance, Relationships, and Results: Principles and Practices fo...Metropolitan Group
 
SDD 2014 for schools
SDD 2014 for schoolsSDD 2014 for schools
SDD 2014 for schoolsIanA_Mac
 
BEYOND ballet why and how
BEYOND ballet why and howBEYOND ballet why and how
BEYOND ballet why and howCre-Aid
 
How to prepare for sat intelligently
How to prepare for sat intelligentlyHow to prepare for sat intelligently
How to prepare for sat intelligentlyTransweb Global Inc
 
Yorkshire Tea – King of the Mornings
Yorkshire Tea – King of the MorningsYorkshire Tea – King of the Mornings
Yorkshire Tea – King of the MorningsNewsworks
 

Andere mochten auch (7)

Increasing Relevance, Relationships, and Results: Principles and Practices fo...
Increasing Relevance, Relationships, and Results: Principles and Practices fo...Increasing Relevance, Relationships, and Results: Principles and Practices fo...
Increasing Relevance, Relationships, and Results: Principles and Practices fo...
 
SDD 2014 for schools
SDD 2014 for schoolsSDD 2014 for schools
SDD 2014 for schools
 
газета на сайт
газета на сайтгазета на сайт
газета на сайт
 
BEYOND ballet why and how
BEYOND ballet why and howBEYOND ballet why and how
BEYOND ballet why and how
 
How to prepare for sat intelligently
How to prepare for sat intelligentlyHow to prepare for sat intelligently
How to prepare for sat intelligently
 
Touring sanfeliu
Touring sanfeliuTouring sanfeliu
Touring sanfeliu
 
Yorkshire Tea – King of the Mornings
Yorkshire Tea – King of the MorningsYorkshire Tea – King of the Mornings
Yorkshire Tea – King of the Mornings
 

Mehr von kmiyako

Build an iOS app with Ionic and 4D
Build an iOS app with Ionic and 4DBuild an iOS app with Ionic and 4D
Build an iOS app with Ionic and 4Dkmiyako
 
4D WORLD TOUR 2017
4D WORLD TOUR 20174D WORLD TOUR 2017
4D WORLD TOUR 2017kmiyako
 
Inside Multi-Threading
Inside Multi-ThreadingInside Multi-Threading
Inside Multi-Threadingkmiyako
 
Mirroring
MirroringMirroring
Mirroringkmiyako
 
Objects Fields
Objects FieldsObjects Fields
Objects Fieldskmiyako
 
Code Optimisation
Code OptimisationCode Optimisation
Code Optimisationkmiyako
 
Auto Update
Auto UpdateAuto Update
Auto Updatekmiyako
 
Classic Query Editor
Classic Query EditorClassic Query Editor
Classic Query Editorkmiyako
 
Web area-phone-home
Web area-phone-homeWeb area-phone-home
Web area-phone-homekmiyako
 
MONET研究会 #14
MONET研究会 #14MONET研究会 #14
MONET研究会 #14kmiyako
 
初心者からプロフェッショナルまで~データベース開発ソフト4Dの魅力を徹底紹介~
初心者からプロフェッショナルまで~データベース開発ソフト4Dの魅力を徹底紹介~初心者からプロフェッショナルまで~データベース開発ソフト4Dの魅力を徹底紹介~
初心者からプロフェッショナルまで~データベース開発ソフト4Dの魅力を徹底紹介~kmiyako
 
Journaling slides
Journaling slidesJournaling slides
Journaling slideskmiyako
 
Unicode-v11-5
Unicode-v11-5Unicode-v11-5
Unicode-v11-5kmiyako
 
Unicode-v11-0
Unicode-v11-0Unicode-v11-0
Unicode-v11-0kmiyako
 
アップグレードセミナー
アップグレードセミナーアップグレードセミナー
アップグレードセミナーkmiyako
 
4D Write Pro
4D Write Pro4D Write Pro
4D Write Prokmiyako
 

Mehr von kmiyako (20)

Build an iOS app with Ionic and 4D
Build an iOS app with Ionic and 4DBuild an iOS app with Ionic and 4D
Build an iOS app with Ionic and 4D
 
4D WORLD TOUR 2017
4D WORLD TOUR 20174D WORLD TOUR 2017
4D WORLD TOUR 2017
 
Leaflet
LeafletLeaflet
Leaflet
 
Inside Multi-Threading
Inside Multi-ThreadingInside Multi-Threading
Inside Multi-Threading
 
4D Tags
4D Tags4D Tags
4D Tags
 
Mirroring
MirroringMirroring
Mirroring
 
Objects Fields
Objects FieldsObjects Fields
Objects Fields
 
Code Optimisation
Code OptimisationCode Optimisation
Code Optimisation
 
Auto Update
Auto UpdateAuto Update
Auto Update
 
Classic Query Editor
Classic Query EditorClassic Query Editor
Classic Query Editor
 
Web area-phone-home
Web area-phone-homeWeb area-phone-home
Web area-phone-home
 
MONET研究会 #14
MONET研究会 #14MONET研究会 #14
MONET研究会 #14
 
4d
4d4d
4d
 
初心者からプロフェッショナルまで~データベース開発ソフト4Dの魅力を徹底紹介~
初心者からプロフェッショナルまで~データベース開発ソフト4Dの魅力を徹底紹介~初心者からプロフェッショナルまで~データベース開発ソフト4Dの魅力を徹底紹介~
初心者からプロフェッショナルまで~データベース開発ソフト4Dの魅力を徹底紹介~
 
Xslt
XsltXslt
Xslt
 
Journaling slides
Journaling slidesJournaling slides
Journaling slides
 
Unicode-v11-5
Unicode-v11-5Unicode-v11-5
Unicode-v11-5
 
Unicode-v11-0
Unicode-v11-0Unicode-v11-0
Unicode-v11-0
 
アップグレードセミナー
アップグレードセミナーアップグレードセミナー
アップグレードセミナー
 
4D Write Pro
4D Write Pro4D Write Pro
4D Write Pro
 

Wakanda#3