In this blog post, We will see how to expose ADF VOs as REST resources. ADF has got native REST support in 12.2.1 release.
We will use Department, Employee VOs and following AM Data Model here.


Creating Release Version:
Creating a release version in adf-config.xml is the first step to be done before exposing any of the AM VOs as resource. Use the following steps to create one and you can follow your own conventions for versioning REST resources. Here I have given the initial version as r1.



Expose VO as REST resources:
Open AM and navigate to Web Service –> REST and Click + icon.

Creation of REST resources create a new project RESTWebService.jpr in our workspace that can be deployed as WAR through which these REST services get deployed.

Give the resource name as shown below and click OK.

Observe the new RESTWebService project gets created.

Also observe other files related to REST resources that get created as shown below.

You can use the following tabs to choose the methods to be exposed and the attributes to be exposed to consumers.

When a VO has View Links the Resource Structure will show all these VOs as shown below. Check these VOs as shown below if it has to be exposed as child resource.

Deployment:
Modify context root of RESTWebService project as shown below representing the purpose of your REST API.

Optionally, we can modify URL pattern in web.xml as shown below.

Integrated WLS:
Select RESTWebservice project and do Run on right click as shown below.

Standalone WLS:
Create EAR profile for ADF application and include RESTWebService project as shown below and deploy this EAR to standalone WLS.

Once the deployment is done, you can access the REST resource using url like:
http://<<host>>:<<port>>/<<ContextRoot>>/<<url pattern>>/<<version>>/<<resource name>>
For e.g.: http://localhost:7001/departmentApi/rest/r1/departments
We can also use latest keyword to access the latest version of the resource.
For e.g.: http://localhost:7001/departmentApi/rest/latest/departments
You can use any REST client to try out POST, DELETE, PUT, PATCH depending on the operations you exposed on REST resource.
Describing Resource – GET:
URI: http://localhost:7001/departmentApi/rest/r1/departments/describe
Describing Resource Instance – GET:
URI: http://localhost:7001/departmentApi/rest/r1/departments/10/describe
Querying Departments – GET:
URI: http://localhost:7001/departmentApi/rest/r1/departments
Querying a particular Department – GET:
URI: http://localhost:7001/departmentApi/rest/r1/departments/{id}
Creating Department – POST:
URI: http://localhost:7001/departmentApi/rest/r1/departments
Content-Type: application/vnd.oracle.adf.resourceitem+json
Body:
{
“DepartmentId”: 1000,
“DepartmentName”: “Administration”,
“ManagerId”: 200,
“LocationId”: 1700
}
Deleting a Department – DELETE:
URI: http://localhost:7001/departmentApi/rest/r1/departments/{id}
Updating a Department – POST:
URI: http://localhost:7001/departmentApi/rest/r1/departments/{id}
Content-Type: application/vnd.oracle.adf.resourceitem+json
X-HTTP-Method-Override: PATCH
Body: (contains only fields to be modified)
{
“DepartmentName”: “Administration-Modified”
}
Replacing a Department – PUT:
URI: http://localhost:7001/departmentApi/rest/r1/departments/{id}
Content-Type: application/vnd.oracle.adf.resourceitem+json
Body: (Values not sent in body will be set to null)
{
“DepartmentId”:10,
“DepartmentName”: “Administration-Replace”,
“ManagerId”: 100
}
Querying Department for a few fields – GET:
URI: http://localhost:7001/departmentApi/rest/r1/departments?fields=DepartmentName,ManagerId
Querying a Department using an attribute – GET:
URI: http://localhost:7001/departmentApi/rest/r1/departments/{id}?q=DepartmentName=Administration
Querying a Department for only Data – GET:
URI: http://localhost:7001/departmentApi/rest/r1/departments?onlyData=true
Will not fetch any links or metadata for resource instances in response.
Sorting Departments – GET:
URI: http://localhost:7001/departmentApi/rest/r1/departments?orderBy=DepartmentName:asc
URI: http://localhost:7001/departmentApi/rest/r1/departments?orderBy=DepartmentName: desc
Limiting the records in Querying Departments – GET:
URI: http://localhost:7001/departmentApi/rest/r1/departments?limit=2
Fetches only 2 records.
Querying Departments from a particular record– GET:
URI: http://localhost:7001/departmentApi/rest/r1/departments?offset=2
Fetches only 2 records.
URI: http://localhost:7001/departmentApi/rest/r1/departments?offset=2&limit=5
Fetches 5 records starting from 2nd record.
Expanding a Child Resource – GET:
URI: http://localhost:7001/departmentApi/rest/r1/departments?expand=Employee (Child Resource Name)
Querying Child Resource – GET:
URI: http://localhost:7001/departmentApi/rest/r1/departments/{id}/child/Employee
Querying a particular Child Resource – GET:
URI: http://localhost:7001/departmentApi/rest/r1/departments/{id}/child/Employee/{Child Resource Id}
Querying a Child Resource using an attribute – GET:
URI: http://localhost:7001/departmentApi/rest/r1/departments/{id}/child/Employee?q=FirstName=Jennifer
References:
http://docs.oracle.com/middleware/1221/adf/develop/GUID-8F85F6FA-1A13-4111-BBDB-1195445CB630.htm#ADFFD589
http://docs.oracle.com/middleware/1221/adf/develop/GUID-589F3905-5A8D-402D-B2D2-3BEEB2D7DDD4.htm#ADFFD54082
Like this:
Like Loading...