This initial implementation helps to expose existing or new OFBiz services as REST. To facilitate this, added a new "action" attribute to service elements that helps to determine how a particular service can be accessed via REST.
1. Important URLs
2. Endpoints
Once deployed, following URLs can be accessed
-
GET /rest/services
-
GET /rest/services/{serviceName}?inParams=<URLEncodedJSON>
-
POST /rest/services/{serviceName} (For this endpoint, the service in parameters must be part of Request Body)
3. Authentication
API is protected by JWT tokens, although other forms of access tokens may be supported in future. An API client must first needs to authenticate itself using Basic Auth using username and password. Username is nothing but OFBiz 'userLogin'. Token can also be generated using Swagger UI.
curl -X POST "https://localhost:8443/rest/auth/token" -H "accept: application/json" -H "Authorization: Basic YWRtaW46b2ZiaXo="
If successfully validated, generated token should be received in response
{
"statusCode": 200,
"statusDescription": "OK",
"successMessage": "Token granted.",
"data": {
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJ1c2VyTG9naW5JZCI6ImFkbWluIiwiaXNzIjoiQXBhY2hlT0ZCaXoiLCJleHAiOjE1OTY3MDk4MjAsImlhdCI6MTU5NjcwODAyMH0.9Hj4pkkeQowAMxPLrI_To0WTohxxgVR6FoViyx5HoboTACQZ4iqDyqiIBodkuCVsZwOTPT1RSAQJ0L_oSVMqBA",
"token_type": "Bearer",
"expires_in": "1800"
}
}
Subsequent API calls must use received token using Bearer Authentication scheme as shown below -
GET /rest/services HTTP/1.1
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJ1c2VyTG9naW5JZCI6ImFkbWluIiwiaXNzIjoiQXBhY2hlT0ZCaXoiLCJleHAiOjE1OTY3MDk4MjAsImlhdCI6MTU5NjcwODAyMH0.9Hj4pkkeQowAMxPLrI_To0WTohxxgVR6FoViyx5HoboTACQZ4iqDyqiIBodkuCVsZwOTPT1RSAQJ0L_oSVMqBA
4. Example
-
List All Services (export="true" and verb = "get|post")
GET /rest/services HTTP/1.1 Content-Type: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJBcGFjaGVPRkJpeiIsImlhdCI6MTU0NzczOTM0OCwiZXhwIjoxNjc5Mjc1MzQ4LCJhdWQiOiJ3d3cuZXhhbXBsZS5jb20iLCJzdWIiOiJqcm9ja2V0QGV4YW1wbGUuY29tIiwiR2l2ZW5OYW1lIjoiSm9obm55IiwiU3VybmFtZSI6IlJvY2tldCIsIkVtYWlsIjoianJvY2tldEBleGFtcGxlLmNvbSIsInVzZXJMb2dpbklkIjoiYWRtaW4iLCJSb2xlIjpbIk1hbmFnZXIiLCJQcm9qZWN0IEFkbWluaXN0cmF0b3IiXX0.fwafgrgpodBJcXxNTQdZknKeWKb3sDOsQrcR2vcRw97FznD6mkE79p10Tu7cqpUx7LiXuROUAnXEgqDice-BSg
Response :
{
"statusCode" : 200,
"statusDescription" : "OK",
"successMessage" : "OK",
"data" : [ {
"name" : "findProductById",
"description" : "Finds productId(s) corresponding to a product reference, productId or a GoodIdentification idValue",
"link" : {
"href" : "https://localhost:8443/rest/services/findProductById",
"rel" : "self",
"type" : "get"
}
}, {
"name" : "searchProductsByGoodIdentificationValue",
"description" : "Search Products by Good Identification Value",
"link" : {
"href" : "https://localhost:8443/rest/services/searchProductsByGoodIdentificationValue",
"rel" : "self",
"type" : "post"
}
} ]
}
-
Call OFBiz service via GET(export="true" and verb = "get|post")
GET /rest/services/findProductById?inParams=%7B%22idToFind%22:%22GZ-1001%22%7D HTTP/1.1 +
Content-Type: application/json +
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJBcGFjaGVPRkJpeiIsImlhdCI6MTU0NzczOTM0OCwiZXhwIjoxNjc5Mjc1MzQ4LCJhdWQiOiJ3d3cuZXhhbXBsZS5jb20iLCJzdWIiOiJqcm9ja2V0QGV4YW1wbGUuY29tIiwiR2l2ZW5OYW1lIjoiSm9obm55IiwiU3VybmFtZSI6IlJvY2tldCIsIkVtYWlsIjoianJvY2tldEBleGFtcGxlLmNvbSIsInVzZXJMb2dpbklkIjoiYWRtaW4iLCJSb2xlIjpbIk1hbmFnZXIiLCJQcm9qZWN0IEFkbWluaXN0cmF0b3IiXX0.fwafgrgpodBJcXxNTQdZknKeWKb3sDOsQrcR2vcRw97FznD6mkE79p10Tu7cqpUx7LiXuROUAnXEgqDice-BSg
Response :
{
"statusCode" : 200,
"statusDescription" : "OK",
"data" : {
"product" : {
"createdStamp" : "2020-06-11T15:29:58.182+0000",
"productName" : "Nan Gizmo",
"createdByUserLogin" : "admin",
"productId" : "GZ-1001",
"taxable" : "Y",
"primaryProductCategoryId" : "101",
"createdTxStamp" : "2020-06-11T15:29:57.523+0000",
"lastUpdatedTxStamp" : "2020-06-11T15:29:57.523+0000",
"isVirtual" : "N",
"autoCreateKeywords" : "Y",
"description" : "Indian style Nan gizmo",
"chargeShipping" : "Y",
"internalName" : "Nan Gizmo",
"lastModifiedByUserLogin" : "admin",
"lastUpdatedStamp" : "2020-06-11T15:29:58.182+0000",
"lastModifiedDate" : "2001-05-13T06:30:00.000+0000",
"productTypeId" : "FINISHED_GOOD",
"createdDate" : "2001-05-13T06:30:00.000+0000",
"isVariant" : "N"
}
}
}
-
Call OFBiz Service via POST
POST rest/services/searchProductsByGoodIdentificationValue HTTP/1.1 Content-Type: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJBcGFjaGVPRkJpeiIsImlhdCI6MTU0NzczOTM0OCwiZXhwIjoxNjc5Mjc1MzQ4LCJhdWQiOiJ3d3cuZXhhbXBsZS5jb20iLCJzdWIiOiJqcm9ja2V0QGV4YW1wbGUuY29tIiwiR2l2ZW5OYW1lIjoiSm9obm55IiwiU3VybmFtZSI6IlJvY2tldCIsIkVtYWlsIjoianJvY2tldEBleGFtcGxlLmNvbSIsInVzZXJMb2dpbklkIjoiYWRtaW4iLCJSb2xlIjpbIk1hbmFnZXIiLCJQcm9qZWN0IEFkbWluaXN0cmF0b3IiXX0.fwafgrgpodBJcXxNTQdZknKeWKb3sDOsQrcR2vcRw97FznD6mkE79p10Tu7cqpUx7LiXuROUAnXEgqDice-BSg { "idFragment": "2644" }
Response
{
"statusCode" : 200,
"statusDescription" : "OK",
"data" : {
"products" : [ {
"internalName" : "Round Gizmo",
"productId" : "GZ-2644",
"primaryProductCategoryId" : "101",
"isVariant" : "N",
"goodIdentificationTypeId" : "INVOICE_EXPORT",
"idValue" : "GZ-2644-replaced",
"isVirtual" : "N"
} ]
}
}