Yichun Zhang (章亦春) > OpenResty-0.5.12 > OpenResty::CheatSheet

Download:
OpenResty-0.5.12.tar.gz

Annotate this POD

CPAN RT

Open  0
View/Report Bugs
Source  

NAME ^

OpenResty::CheatSheet - Cheat sheet for OpenResty

DESCRIPTION ^

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.

LOGIN API ^

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

MODEL API ^

Model Lists
    GET /=/model                    Read model list
    DELETE /=/model                 Delete all models
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
Columns
    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
Rows
    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
Parameters
    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

VIEW API ^

View lists
    GET /=/view                     Get a list of all the views available
    DELETE /=/view                  Delete all the views
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
Calling views
    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

ACTION API ^

Note: Actions have not yet been implemented.

Action lists
    GET /=/action           Get the list of all the existing actions
    DELETE /=/action        Remove all the actions (except built-in ones)
Actions
    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" }
Calling actions
    POST /=/action/PostComment/~/~       Invoke the PostComment action
    { "author":"agentzh",                  defined above
      "content":"Good post!",
      "post":125 }

GENERAL PARAMETERS ^

    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

Path Suffixes ^

    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

ROLE API ^

Role lists
    GET /=/role             Get the role list
    DELETE /=/role          Delete all roles (except built-in ones)
Roles
    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"
    }
ACL rules for a role
    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

FEED API ^

    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

CAPTCHA API ^

Admin Setup
    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/~/~" }
Use in clients
    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

AUTHOR ^

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

SEE ALSO ^

OpenResty::Spec::REST, OpenResty.

syntax highlighting: