JSON Web Services provide convenient way access to portal service layer methods by exposing them as JSON HTTP API. This makes services methods easily accessible using HTTP requests, not only from JavaScript within the portal, but also from any JSON-speaking client.
While using Service Builder to build services via service.xml append each entity definition with remote-service="true" to create and enable web services for the entity. By doing this All remote-enabled services (i.e. entities with remote-service="true" in service.xml) are exposed as JSON Web Services.
When Service Builder creates each -Service.java interface for a remote-enabled service, the @JSONWebService annotation is added on the class level of that interface. Therefore, all of the public methods of that interface become registered and available as JSON Web Services.
On server startup a restricted scanning is done on portal and service jar files for the classes that uses @JSONWebService annotation. Post this the annotation are loaded and service methods are exposed as JSON based API.
For example UserService looks as below:
http://localhost:8080/api/jsonws/user-service/get-user-by-id
All methods prefixed with get, has, is are pre assumed to be readonly and thus are exposed as GET methods, leaving rest as POST methods.
Non-public service methods require the user to be registered before invoking the method and accessed as
http://[server]:[port]/api/secure/jsonws/[service-class-name]/[service-method-name]http://localhost:8080/api/jsonws/user-service/get-user-by-id
The article is my summarized view while working on the topic and references have been taken from Liferay community and documentation
Registering JSON web services
While using Service Builder to build services via service.xml append each entity definition with remote-service="true" to create and enable web services for the entity. By doing this All remote-enabled services (i.e. entities with remote-service="true" in service.xml) are exposed as JSON Web Services.
When Service Builder creates each -Service.java interface for a remote-enabled service, the @JSONWebService annotation is added on the class level of that interface. Therefore, all of the public methods of that interface become registered and available as JSON Web Services.
On server startup a restricted scanning is done on portal and service jar files for the classes that uses @JSONWebService annotation. Post this the annotation are loaded and service methods are exposed as JSON based API.
For example UserService looks as below:
@JSONWebService public interface UserService{ ... }
Accessing Services
Below is the convention used to access any service exposed by default Liferay bundlehttp://[server]:[port]/api/jsonws/[service-class-name]/[service-method-name]
service-class-name is the name generated from service class name,
by removing the Service or ServiceImpl suffix and converting it to a
lowercase name. service-method-name is generated from the service method name,
by converting the camel-case method name to a lowercase separated-by-dash nameFor example UserService can be accessed as:
@JSONWebService public interface UserService{public User getUserById(long userId) {...}}
http://localhost:8080/api/jsonws/user-service/get-user-by-id
All methods prefixed with get, has, is are pre assumed to be readonly and thus are exposed as GET methods, leaving rest as POST methods.
Non-public service methods require the user to be registered before invoking the method and accessed as
http://[server]:[port]/api/secure/jsonws/[service-class-name]/[service-method-name]http://localhost:8080/api/jsonws/user-service/get-user-by-id
Viewing list of default liferay bundle service
You can view all the registered and available service listing ay accessing the below urlhttp://localhost:8080/api/jsonws
In my next post, I have further detailed about configuring and
accessing the JSON Web services
References:The article is my summarized view while working on the topic and references have been taken from Liferay community and documentation
No comments:
Post a Comment