[ 
https://issues.apache.org/jira/browse/OPENJPA-1851?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12924746#action_12924746
 ] 

Pinaki Poddar commented on OPENJPA-1851:
----------------------------------------

Proposed URI  Syntax for REST on OpenJPA
---------------------------------------------------------------
  * REST as a interaction paradigm
  * HTTP as communication protocol
  * JPA as a service
  
  A client having no Java, no access to persistent domain class definitions can 
be enabled to access
  JPA features e.g. querying a database with an object-oriented view and 
receive a XML or HTML document
  over HTTP. 
  
  This brief note proposes a protocol syntax to carry out such an interaction. 
  
   JEST (JPA-REST) URL Syntax
   --------------------------
   http://host[:port]/action/[option]*[?[param-key=param-value];*]
   
   action : denotes the JPA operation to be performed.
            must be the first path segment of a HTTP URI
            For example one of {find, query, insert, merge, remove, properties, 
domain}

   option : qualifies the action. 
            specific to the action.
            For example, a query action can qualify with query/single to get a 
single result.
            zero or more options can be specified. 
            options are separated by forward slash
            options may have value e.g. 
query/fecthplan=myPlan/ignoreCache/maxResult=20?select p from Person ... 
            options are not order dependent  
            
   param  : parameter for the action
            For example, JPQL string as well the query parameters are params 
for a query action
            zero or more param can be specified
            params are separated by semicolon
            params may have value     


Few examples
------------------------------------

01. Get name of the persistent unit
            
    http://www.jpa.com:6789/
           
02. List simple name of the domain classes
            
    http://www.jpa.com:6789/domain
   
        
03. List the key-value properties of the persistent unit

    http://www.jpa.com:6789/properties
        
        
        
04. Find an instance by key
 
    http://www.jpa.com:6789/find?Person;123456789
    
    Comment: simple name of the server-side Java types should suffice, unless 
ambiguous for the persistence unit
    
    
05. Find an instance by key
    
    http://www.jpa.com:6789/find?Person;ssn=123456789;name=Pinaki
    
    Comment: This form is required when compound keys are used

    
06. Get the result of the query with no parameter

    http://www.jpa.com:6789/query?select p from Person p


07. Get the result of the query with single parameter

    http://www.jpa.com:6789/query?select p from Person p where 
p.name=:name;name=Pinaki


08. Get the result of the query with multiple parameters

    http://www.jpa.com:6789/query?select p from Person p where p.name=:name and 
age > :age;name=Pinaki;age=20
    http://www.jpa.com:6789/query?select p from Person p where p.first=:first 
and p.last=:last;first=Pinaki;last=Poddar
    
    Comment: Notice that age is a numeric parameter and needs to be implicitly 
converted before JPA query is executed.
             Some changes in OpenJPA kernel is needed to handle/relax parameter 
type checking.
    
09. Get the single result of the query 
     
    http://www.jpa.com:6789/query/single?select p from Person p where 
p.name=:name;name=Pinaki

    
10. Get the result of the named query     
    
    http://www.jpa.com:6789/query/named?QueryPersonByName;name=Pinaki
    
11. Get the single result of the named query

    http://www.jpa.com:6789/query/single/named?QueryPersonByName;name=Pinaki
    http://www.jpa.com:6789/query/named/single?QueryPersonByName;name=Pinaki
     
   Comment: both forms are equivalent


Host syntax: http://www.jpa.com:6789

A OpenJPA runtime running at www.jpa.com with port 6789 listening for HTTP 
requests on the above syntax. 








> RESTful access to Persistence Unit runtime 
> -------------------------------------------
>
>                 Key: OPENJPA-1851
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-1851
>             Project: OpenJPA
>          Issue Type: New Feature
>          Components: competitive, jpa, usability
>            Reporter: Pinaki Poddar
>            Assignee: Pinaki Poddar
>
> A persistence unit should provide access to a remote, non-Java client in a 
> RESTful fashion.
> The communication protocol should be HTTP.
> The 'safe' operations (HTTP GET for find, query, properties, metamodel 
> browsing etc) can be encoded in URI syntax itself. 
> The state representation would start with schema-less  XML, followed by 
> schema-compliant XML and JSON
> The POST/PUT operations and transactions will be addressed in a separate task.
>  

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to