
OpenResty::CheatSheet - Cheat sheet for OpenResty

This 'cheat sheet' is a handy reference, meant for beginning OpenResty users. Not everything is mentioned, but most of the common features in OpenResty::Spec::REST may already be included.
Note that in the following small examples the plain password passing on the URL is merely a hack in the currrent implementation (just for my development convenience). It is supposed to be encrypted on the client side first (with a random salt obtained from the OpenResty server) and all go through SSL in the real thing.

GET /=/login/agentzh.Admin/password Login as account "agentzh" and
role "Admin" using encrypted
password "password"
DELETE /=/view/Blah?_user=agentzh.Admin&_password=password

GET /=/model Read model list
DELETE /=/model Delete all models
GET /=/model/MyModel Read the info for MyModel
POST /=/model/MyModel Create a model MyModel
{ "description":"Model description",
"columns":[
{
"name":"title","label":"Title",
"type":"text","default":"No title",
"required":1
},
{
"name":"gender","label":"Gender"
},
...
] }
PUT /=/model/MyModel Alter the model MyModel
{ "name":"NewName","description":"New Description" }
DELETE /=/model/MyModel Delete model MyModel
GET /=/model/MyModel/mycol Read the info for MyModel's mycol
POST /=/model/MyModel/mycol Add a new column named mycol
{ "label":"My column","type":"integer","default":0 }
PUT /=/model/MyModel/mycol Alter the column mycol
{ "name":"new_name", "type":"real" }
DELETE /=/model/MyModel/mycol Remove column mycol
GET /=/model/MyModel/id/3 Read the row with id 3
POST /=/model/MyModel/~/~ Insert new rows
[ { "col1":"", "col2":"", ... }, ... ]
POST /=/model/MyModel/~/~ Insert a single new row
{ "col1":"", "col2":"", ... }
PUT /=/model/MyModel/id/2 Update the row with id 2
{ "col1":"", "col2":"", ... }
DELETE /=/model/MyModel/id/2 Delete the row with id 2
DELETE /=/model/MyModel/~/~ Delete all the rows
GET /=/model/MyModel/~/~?_order_by=col1 order by col1
GET /=/model/MyModel/~/~?_order_by=col1,col2 order by col1, col2
GET /=/model/MyModel/~/~?_order_by=col1:asc,col2:desc
order by col1 asc, col2 desc
GET /=/model/MyModel/~/~?_offset=10&_count=20 offset 10 limit 20

GET /=/view Get a list of all the views available
DELETE /=/view Delete all the views
POST /=/view/MyView Create a new view named MyView which
{ "description":"My view", takes the parameters "table" and "min"
"definition":
"select * from Post, $table where Post.id >= $min"
}
GET /=/view/MyView View the definition of the view MyView
PUT /=/view/MyView Update the information of MyView
{ "name":"NewName", "description":"New desc" }
DELETE /=/view/NewName Remove the NewName view
GET /=/view/MyView/~/~?table=Comment&min=100
# assuming the PostsByMonth view has 2 parameters, "year" and "month"
GET /=/view/PostsByMonth/~/~?year=2008&month=3?
GET /=/view/PostsByMonth/year/2008?month=3
GET /=/view/PostsByMonth/month/3?year=2008

Note: Actions have not yet been implemented.
GET /=/action Get the list of all the existing actions
DELETE /=/action Remove all the actions (except built-in ones)
POST /=/action/PostComment Create an action for posting
{ "description":"Post a comment", new comments
"parameters":[
{"name":"author","label":"Author","type":"literal"},
{"name":"content","label":"Content","type":"literal"},
{"name":"post","label":"Post","type":"literal"}
],
"definition":"
POST /=/model/Comment/~/~
{ \"author\": $author,
\"content\": $content,
\"post\": $post };
update Post set comments=comments+1
where post = $post;" }
PUT /=/action/PostComment Update an existing action
{ "name":"SendComment",
"description":"Send a comment" }
POST /=/action/PostComment/~/~ Invoke the PostComment action
{ "author":"agentzh", defined above
"content":"Good post!",
"post":125 }

GET /=/view/PostsByMonth/~/~?_callback=foo Returns "foo(<JSON>);"
instead of "<JSON>"
GET /=/view/PostsByMonth/~/~?_var=foo Returns "foo=<JSON>;"
instead of "<JSON>"
GET /=/view/Blah?_user=agentzh.Public Per-request-login
GET /=/view/Blah?_session=23EC98F2-F1A... Specify the session

GET /=/model.json Get model list in JSON format (the default)
GET /=/model.yaml ditto, but in YAML format
GET /=/model.yml .yml is an alias for .yaml

GET /=/role Get the role list
DELETE /=/role Delete all roles (except built-in ones)
GET /=/role/MyRole Get the info for the "MyRole" role
POST /=/role/Reader Create an anoymous role named "Reader"
{ "description":"My Role",
"login":"anonymous" }
POST /=/role/Poster Create a "Poster" role
{ "description":"Article Poster", which can ony
"login":"password", login via passwords
"password":"encrypted password"
}
GET /=/role/MyRole/~/~ Get all the ACL rules for MyRole
GET /=/role/MyRole/method/GET Filter out ACL rules with GET method
only
POST /=/role/MyRole/~/~ Allow MyRole to insert new rows into
{ "method":"POST", "/=/model/Post" } the Post model
PUT /=/role/MyRole/id/5 Modify the ACL rule with id 5
{ "method":"PUT" }
DELETE /=/role/MyRole/method/DELETE Banned delete operations from MyRole
DELETE /=/role/MyRole/~/~ Delete all the ACL rules for MyRole

POST /=/feed/Post, Create a feed named "Post" using the
{ "description":"My feed", RecentPosts view
"author":"Me","copyright":"",
"language":"en","title":"Craps",
"view":"RecentPosts",
"link":"http://blog.foo.com",
"logo":"http://foo.com/me.jpg",
}
GET /=/feed/Post Read info for the Post feed back
PUT /=/feed/Post Update attributes of the Post feed
{"author":"New author",
"link":"http://new.home"}
GET /=/feed/Post/~/~ Get the RSS 2.0 feed in XML
DELETE /=/feed/Post Remove the Post feed
DELETE /=/feed Remove all the feeds

POST /=/role/Commenter Create a CommentPoster role
{ "description":"Comment Poster",
"login":"captcha" }
POST /=/role/Comment/~/~ Assign some permissions to it
{ "method":"POST",
"url":"/=/model/Comment/~/~" }
GET /=/captcha/id Get a captcha ID
GET /=/captcha/id/<ID> Get the captcha image
POST /=/model/Comment/~/~?_user=account.Commenter&_captcha=<ID>:<solution>
Use the captcha ID and solution
to do the permitted action

Agent Zhang (agentzh) <agentzh at yahoo.cn>.
