NAME
OpenResty::Spec::REST - OpenResty REST Service Specification [draft]
AUTHOR
Agent Zhang (agentzh) <agentzh@yahoo.cn>
VERSION
CREATED: Nov 19, 2007
LAST MODIFIED: Feb 28, 2008
VERSION: 1.00
LICENSE
Copyright (c) 2007, 2008 Yahoo! China, Alibaba Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
Texts. A copy of the license can be found at
http://www.gnu.org/licenses/fdl.html
DESCRIPTION
This document defines the REST API for the OpenResty protocol, an web service interface to relational databases.
Login
Anonymous login
Login by password
Per-request-login
Login by captchas
Models
Operations on the model list
Operations on a model
Operations on a model column
Operations on model rows
Views
Operations on the view list
Operations on a view
Operations on a view param
Invoking a view
Actions
Operations on the action list
Operations on an action
Operations on an action param
Invoking an action
Roles
Roles are first-order objects in OpenResty, just as models, views, and actions. Roles have very similar interface to models, in particular. You'll notice the strong parallels between these two.
Operations on the role list
Read all the existing roles
GET /=/role
The server returns a list of hashes for all the roles available in the account. Each hash corresponds to a role, containing the fields src
, name
, and description
. A sample response is given below:
[
{"src":"/=/role/Admin","name":"Admin","description":"Administrator"},
{"src":"/=/role/Public","name":"Public","description":"Anonymous"},
{"src":"/=/role/Newposter","name":"Newposter","description":"Comment poster"}
]
Note that built-in roles Admin
and Public
are reserved and will always get shown here.
Delete all the roles
DELETE /=/role
Note that built-in roles Admin
and Public
will always be skipped. A typical server response is
{"success":1,"warning":"Predefined roles skipped."}
Operations on a role
Create a role
POST /=/role/~
{
name: <role_name>,
description: <role_description>,
login: <login_method>,
password: <password>,
}
<login_method>
can be one of the following: anonymous
, password
, and captcha
. See the "Login" section for more information regarding these different login methods.
The password
field in the JSON body for creating a new role can only appear when the login
field is of the value "password"
.
Read a role's meta info
GET /=/role/<role_name>
A typical response from the server is
{
"columns":[
{"name":"id","label":Rule ID"","type":"serial"}
{"name":"method","label":"HTTP method","type":"text"},
{"name":"url","label":"Resource","type":"text"}
],
"name":"Poster",
"description":"My Poster Role",
"login":"password"
}
Note that the password
field won't get shown even if the login
field is "password
".
Update a role's meta info
Update some properties (name
, login
, password
, and etc.) for role <role_name>
:
PUT /=/role/<role_name>
{ <key>:<new_value>, ... }
The following example
PUT /=/role/Poster
{ name: "NewPoster", password: 5906438 }
changes the name of the Poster
role to NewPoster
and also changes its password to 5906438
.
Delete a role
Delete a role named <role_name>
:
DELETE /=/role/<role_name>
For instance,
DELETE /=/role/Poster
removes the Poster
role (as well as its associative ACL rules) completely.
Operations on a role's access rules
One can manipulate a role's ACL rules with the same interface as model rows. Every role can be considered a special model with three columns, id
, method
and url
.
Insert new ACL rules
One can insert one rule at a time:
POST /=/role/<role_name>/~/~
{ method: <HTTP_method_allowed>, url: <url_pattern_allowed> }
or insert multiple rules in a single request:
POST /=/role/<role_name>/~/~
[
{ method: <HTTP_method_allowed>, url: <url_allowed> },
...
]
Here is an example:
POST /=/role/Public/~/~
[
{"method":"POST","url":"/=/model/~"},
{"method":"GET","url":"/=/model/A/~/~"},
{"method":"DELETE","url":"/=/model/A/id/~"}
]
This request inserts 3 ACL rules for the Public
role. Tild ~
is a match-any wildcard. And at least the following requests are allowed for the Public
role:
POST /=/model/~
POST /=/model/Moose
GET /=/model/A/id/3
GET /=/model/A/~/~
DELETE /=/model/A/id/2
DELETE /=/model/A/id/52
Query existing ACL rules
One can obtain all the ACL rules by using
GET /=/role/<role_name>/~/~
or limit the rules by a rule column
GET /=/role/<role_name>/<column>/<value>
which only returns the rules with column column
equal to value
.