Step-by-Step: Build a Custom REST API with REST Builder
Create a multi-module Gradle project: impl, api, client modules
Add REST Builder plugin to impl/build.gradle:
buildscript
{
dependencies
{
classpath
group: 'com.liferay', name: 'com.liferay.gradle.plugins.rest.builder'
}
}
apply
plugin: 'com.liferay.portal.tools.rest.builder'
Create rest-config.yaml and rest-openapi.yaml in impl module root
Run: ./gradlew buildREST - generates all interface, base, DTO classes
Implement business logic in generated *ResourceImpl.java:
@Component(service
= ProductResource.class)
public
class ProductResourceImpl extends BaseProductResourceImpl {
@Reference
private
ProductLocalService _productLocalService;
@Override
public
Page<Product> getProductsPage(
String
filter, Pagination pagination, Sort[] sorts) throws Exception {
//
OData filter parsing
Filter
oDataFilter = _filterParserProvider.provide(ProductEntityModel.class)
.parse(filter);
//
Fetch from service
List<ProductModel>
models = _productLocalService.getProducts(
pagination.getStartPosition(),
pagination.getEndPosition(), ...
);
return
Page.of(models.stream()
.map(ProductDTOConverter::toDTO).collect(toList()),
pagination,
_productLocalService.getProductsCount());
}
}
Deploy: ./gradlew deploy - API available at /o/product/v1.0/products
💡 REST Builder generates a complete Java client SDK automatically. This can be used by other Liferay modules or external Java services to consume your API with type-safe method calls.
Comments
Post a Comment