hadrien / pyramid_rest

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Pyramid REST

https://travis-ci.org/hadrien/pyramid_rest.png?branch=master https://coveralls.io/repos/hadrien/pyramid_rest/badge.png https://pypip.in/d/pyramid_rest/badge.png

Overview

  • First draft of a pyramid extension to build RESTful web application.

  • Features included:

    • resource definition which configure routes/views, i.e:

      • a resource 'application':

        • route [GET/POST] /applications
        • route [GET/DELETE/PUT] /applications/{application_id}
        • route GET /applications/{application_id}/new
        • route GET /applications/{application_id}/edit
      • a resource 'application.user':

        • route [GET/POST] /applications/{application_id}/users
        • route [GET/DELETE/PUT] /applications/{application_id}/users/{user_id}
        • route GET /applications/{application_id}/users/new
        • route GET /applications/{application_id}/users/edit
      • a singular resource 'application.user.score':

        • route [GET/PUT] /applications/{application_id}/users/{user_id}/score
        • route GET /applications/{application_id}/users/{user_id}/score/edit
    • resources are added to config introspector and related to their routes, views, sub-resource and parent resource;

    • end user defines REST methods (index, create, show, update, delete, new, edit);

    • by default:

      • HTTP 405 is returned for any method not provided;
      • permissions 'index, create, show, update, delete, new, edit' are associated to respective method;
  • 3 ways to configure resource:

    1. Imperative using config.add_resource, it will associate class in views module to resource

      config.add_resource('application')       # .views.applications:ApplicationsView
      config.add_resource('application.user')  # .views.application_users:ApplicationUsersView
    2. Declarative using Resource class (cornice style)

      app_users = Resource('application.user')
      
      @app_users.index()
      def index(context, request, application_id):
         pass
      
      @app_users.show()
      def show(context, request, application_id, id):
         pass
    3. Declarative using resource_config decorator

      @resource_config('application.user')
      class AppUsers(object):
      
         def __init__(self, context, request):
            pass
      
         def index(self, application_id):
            return {}
      
         @method_config(renderer='example.mako')
         def edit(self, application_id, id):
            return {}

What next?

  1. HTTP PATCH method: http://tools.ietf.org/html/rfc5789
  2. Resource Scaffolding command;
  3. Links;
  4. Validation;
  5. Pagination;
  6. Automatic resource definition of SQLAlchemy entities;
  7. Have a view parameter in add_resource to override view definition;

Code/Feedbacks

https://github.com/hadrien/pyramid_rest

About


Languages

Language:Python 100.0%