[
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.