<?xml version="1.0" encoding="UTF-8" ?>
<rdf:RDF xmlns="http://usefulinc.com/ns/doap#" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><Project><name>repoze.bfg.restrequest</name>
<shortdesc>a REST aware Request for implementing RESTful applications with repoze.bfg</shortdesc>
<description>Introduction
============

``repoze.bfg.restrequest`` implements 4 additional Request types for use with
RESTful applications.

Imagine you want to create separate views for one resource (identified by an URL) and different HTTP methods. In a default repoze.bfg project you can e.g. write::


  from repoze.bfg.restrequest import IGETRequest, IPOSTRequest
  from webob import Response
  
  def my_view_get(context, request):
      return Response("GET\n")

  def my_view_post(context, request):
      return Response("POST "+request.body+"\n")
      
This defines one method ``my_view_get`` in case a ``GET`` request is performed on this resource and ``my_view_post`` in case a ``POST`` request is performed. You can do similar things with ``PUT`` or ``DELETE``.

In order to enable these views you need to wire them in ``configure.zcml`` like this::

  &lt;!-- include to activate the event handler for marking REST requests --&gt;
  &lt;include package="repoze.bfg.restrequest" /&gt;
  
  &lt;bfg:view for=".models.IMyModel"
        request_type="repoze.bfg.restrequest.interfaces.IGETRequest"
        view=".views.my_view_get"
        /&gt;

  &lt;bfg:view for=".models.IMyModel"
        request_type="repoze.bfg.restrequest.interfaces.IPOSTRequest"
        view=".views.my_view_post"
        /&gt;

You can do the same using ``repoze.bfg.convention`` in which case your views would look like this::

  from repoze.bfg.restrequest import IGETRequest, IPOSTRequest
  from webob import Response

  @bfg_view(request_type=IGETRequest, for_=models.IMyModel)
  def my_view_get(context, request):
      return Response("GET\n")

  @bfg_view(request_type=IPOSTRequest, for_=models.IMyModel)
  def my_view_post(context, request):
      return Response("POST "+request.body+"\n")

Make sure you nevertheless include ``repoze.bfg.restrequest`` in your ``configure.zcml``.


Testing your application
------------------------

A simple test for the above would be to start your application and use ``curl`` to see what the result is for different methods::

    $ curl http://127.0.0.1:6543/
    GET
    
    $ curl http://127.0.0.1:6543/ -d "posttest"
    POST posttest
    

    
    





Changelog
=========

1.0 - initial release (19 Oct 2008)
------------------------------------

* Initial release

1.0.1 - package bugfixing
-------------------------

* moved HISTORY.txt to main directory so that setup.py finds and packages it.</description>
<maintainer><foaf:Person><foaf:name>Christian Scholz</foaf:name>
<foaf:mbox_sha1sum>085058b09c6e76baaf6a9face38853d02ba033f2</foaf:mbox_sha1sum></foaf:Person></maintainer>
<release><Version><revision>1.0.1</revision></Version></release>
</Project></rdf:RDF>