{"id":40236508,"url":"https://github.com/rupakg/aws-java-products-api","last_synced_at":"2026-01-19T23:07:44.472Z","repository":{"id":66537487,"uuid":"129158635","full_name":"rupakg/aws-java-products-api","owner":"rupakg","description":"A serverless REST API service for products deployed to AWS. The data is stored in a DynamoDB table.","archived":false,"fork":false,"pushed_at":"2025-05-20T22:07:59.000Z","size":8,"stargazers_count":30,"open_issues_count":1,"forks_count":44,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-05-20T23:24:43.044Z","etag":null,"topics":["dynamodb","java","rest-api","serverless","serverless-framework"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rupakg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2018-04-11T21:54:04.000Z","updated_at":"2024-09-17T20:57:59.000Z","dependencies_parsed_at":null,"dependency_job_id":"aa4141e8-afd7-48e3-a027-ce40e6a144a4","html_url":"https://github.com/rupakg/aws-java-products-api","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rupakg/aws-java-products-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rupakg%2Faws-java-products-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rupakg%2Faws-java-products-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rupakg%2Faws-java-products-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rupakg%2Faws-java-products-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rupakg","download_url":"https://codeload.github.com/rupakg/aws-java-products-api/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rupakg%2Faws-java-products-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28588971,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-19T20:45:59.482Z","status":"ssl_error","status_checked_at":"2026-01-19T20:45:41.500Z","response_time":67,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dynamodb","java","rest-api","serverless","serverless-framework"],"created_at":"2026-01-19T23:07:43.750Z","updated_at":"2026-01-19T23:07:44.466Z","avatar_url":"https://github.com/rupakg.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Serverless REST API in Java/Maven using DynamoDB\n\n\n![image](https://user-images.githubusercontent.com/8188/38645675-ec708d0e-3db2-11e8-8f8b-a4a37ed612b9.png)\n\n\nThe sample serverless service will create a REST API for products. It will be deployed to AWS. The data will be stored in a DynamoDB table.\n\nThis is a companion app for the blog post [REST API in Java using DynamoDB and Serverless](https://serverless.com/blog/how-to-create-a-rest-api-in-java-using-dynamodb-and-serverless/).\n\n## Install Pre-requisites\n\n* `node` and `npm`\n* Install the JDK and NOT the Java JRE from [Oracle JDK](http://www.oracle.com/technetwork/java/javase/downloads/index.html). And set the following:\n`export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home`\n* [Apache Maven](https://maven.apache.org/). After [downloading](https://maven.apache.org/download.html) and [installing](https://maven.apache.org/install.html) Apache Maven, please add the `apache-maven-x.x.x` folder to the `PATH` environment variable.\n\n### Test Pre-requisites\n\nTest Java installation:\n\n```\n$ java --version\n\njava 10 2018-03-20\nJava(TM) SE Runtime Environment 18.3 (build 10+46)\nJava HotSpot(TM) 64-Bit Server VM 18.3 (build 10+46, mixed mode)\n```\n\nTest Maven installation:\n\n```\n$ mvn -v\n\nApache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-24T14:49:05-05:00)\nMaven home: /usr/local/apache-maven-3.5.3\nJava version: 10, vendor: Oracle Corporation\nJava home: /Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home\nDefault locale: en_US, platform encoding: UTF-8\nOS name: \"mac os x\", version: \"10.13.3\", arch: \"x86_64\", family: \"mac\"\n```\n\n## Build the Java project\n\nCreate the java artifact (jar) by:\n\n```\n$ cd aws-java-products-api\n$ mvn clean install\n\n[INFO] Scanning for projects...\n[INFO]\n[INFO] --------------------\u003c com.serverless:products-api \u003e---------------------\n[INFO] Building products-api dev\n[INFO] --------------------------------[ jar ]---------------------------------\n[INFO]\n[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ products-api ---\n[INFO] Deleting /Users/rupakg/projects/svrless/apps/aws-java-products-api/target\n\n...\n...\n\n[INFO] --- maven-install-plugin:2.4:install (default-install) @ products-api ---\n[INFO] Installing /Users/rupakg/projects/svrless/apps/aws-java-products-api/target/products-api-dev.jar to /Users/rupakg/.m2/repository/com/serverless/products-api/dev/products-api-dev.jar\n[INFO] Installing /Users/rupakg/projects/svrless/apps/aws-java-products-api/pom.xml to /Users/rupakg/.m2/repository/com/serverless/products-api/dev/products-api-dev.pom\n[INFO] ------------------------------------------------------------------------\n[INFO] BUILD SUCCESS\n[INFO] ------------------------------------------------------------------------\n[INFO] Total time: 2.790 s\n[INFO] Finished at: 2018-04-08T19:58:15-04:00\n[INFO] ------------------------------------------------------------------------\n```\n\nWe can see that we have an artifact in the `target` folder named `products-api-dev.jar`.\n\n## Deploy the serverless app\n\n```\n$ sls deploy\n\nServerless: Packaging service...\nServerless: Creating Stack...\nServerless: Checking Stack create progress...\n.....\nServerless: Stack create finished...\nServerless: Uploading CloudFormation file to S3...\nServerless: Uploading artifacts...\nServerless: Validating template...\nServerless: Updating Stack...\nServerless: Checking Stack update progress...\n..................................\nServerless: Stack update finished...\nService Information\nservice: products-api\nstage: dev\nregion: us-east-1\nstack: products-api-dev\napi keys:\n  None\nendpoints:\n  GET - https://xxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/products\n  GET - https://xxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/products/{id}\n  POST - https://xxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/products\n  DELETE - https://xxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/products/{id}\nfunctions:\n  listProducts: products-api-dev-listProducts\n  getProduct: products-api-dev-getProduct\n  createProduct: products-api-dev-createProduct\n  deleteProduct: products-api-dev-deleteProduct\n```\n\n## Test the API\n\nLet's invoke each of the four functions that we created as part of the app.\n\n### Create Product\n\n```\n$ curl -X POST https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/products -d '{\"name\": \"Product1\", \"price\": 9.99}'\n\n{\"id\":\"ba04f16b-f346-4b54-9884-957c3dff8c0d\",\"name\":\"Product1\",\"price\":9.99}\n```\n\n### List Products\n\n```\n$ curl https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/products\n\n[{\"id\":\"dfe41235-0fe5-4e6f-9a9a-19b7b7ee79eb\",\"name\":\"Product3\",\"price\":7.49},\n{\"id\":\"ba04f16b-f346-4b54-9884-957c3dff8c0d\",\"name\":\"Product1\",\"price\":9.99},\n{\"id\":\"6db3efe0-f45c-4c5f-a73c-541a4857ae1d\",\"name\":\"Product4\",\"price\":2.69},\n{\"id\":\"370015f8-a8b9-4498-bfe8-f005dbbb501f\",\"name\":\"Product2\",\"price\":5.99},\n{\"id\":\"cb097196-d659-4ba5-b6b3-ead4c07a8428\",\"name\":\"Product5\",\"price\":15.49}]\n```\n\n**No Product(s) Found:**\n\n```\n$ curl https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/products\n\n[]\n```\n\n### Get Product\n\n```\n$ curl https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/products/ba04f16b-f346-4b54-9884-957c3dff8c0d\n\n{\"id\":\"ba04f16b-f346-4b54-9884-957c3dff8c0d\",\"name\":\"Product1\",\"price\":9.99}\n```\n\n**Product Not Found:**\n\n```\ncurl https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/products/xxxx\n\n\"Product with id: 'xxxx' not found.\"\n```\n\n### DeleteProduct\n\n```\n$ curl -X DELETE https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/products/24ada348-07e8-4414-8a8f-7903a6cb0253\n```\n\n**Product Not Found:**\n\n```\ncurl -X DELETE https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/products/xxxx\n\n\"Product with id: 'xxxx' not found.\"\n```\n\n## View the CloudWatch Logs\n\n```\n$ serverless logs --function getProduct\n\nSTART RequestId: 34f45684-3dd0-11e8-bf8a-7f961671b2de Version: $LATEST\n...\n\n2018-04-11 21:35:14 \u003c34f45684-3dd0-11e8-bf8a-7f961671b2de\u003e DEBUG org.apache.http.wire:86 - http-outgoing-0 \u003e\u003e \"{\"TableName\":\"java-products-dev\",\"ConsistentRead\":true,\"ScanIndexForward\":true,\"KeyConditionExpression\":\"id = :v1\",\"ExpressionAttributeValues\":{\":v1\":{\"S\":\"6f1dfeb9-ea08-4161-8877-f6cc724b39e3\"}}}\"\n\n...\n\n2018-04-11 21:35:14 \u003c34f45684-3dd0-11e8-bf8a-7f961671b2de\u003e DEBUG org.apache.http.wire:86 - http-outgoing-0 \u003c\u003c \"{\"Count\":1,\"Items\":[{\"price\":{\"N\":\"9.99\"},\"id\":{\"S\":\"6f1dfeb9-ea08-4161-8877-f6cc724b39e3\"},\"name\":{\"S\":\"Product1\"}}],\"ScannedCount\":1}\"\n\n...\n\n2018-04-11 21:35:14 \u003c34f45684-3dd0-11e8-bf8a-7f961671b2de\u003e DEBUG org.apache.http.impl.conn.PoolingHttpClientConnectionManager:314 - Connection [id: 0][route: {s}-\u003ehttps://dynamodb.us-east-1.amazonaws.com:443] can be kept alive for 60.0 seconds\n2018-04-11 21:35:14 \u003c34f45684-3dd0-11e8-bf8a-7f961671b2de\u003e DEBUG org.apache.http.impl.conn.PoolingHttpClientConnectionManager:320 - Connection released: [id: 0][route: {s}-\u003ehttps://dynamodb.us-east-1.amazonaws.com:443][total kept alive: 1; route allocated: 1 of 50; total allocated: 1 of 50]\n2018-04-11 21:35:14 \u003c34f45684-3dd0-11e8-bf8a-7f961671b2de\u003e DEBUG com.amazonaws.request:87 - Received successful response: 200, AWS Request ID: MT1EV3AV07T9OD0MJH9VBJSIB7VV4KQNSO5AEMVJF66Q9ASUAAJG\n2018-04-11 21:35:14 \u003c34f45684-3dd0-11e8-bf8a-7f961671b2de\u003e DEBUG com.amazonaws.requestId:136 - x-amzn-RequestId: MT1EV3AV07T9OD0MJH9VBJSIB7VV4KQNSO5AEMVJF66Q9ASUAAJG\n2018-04-11 21:35:14 \u003c34f45684-3dd0-11e8-bf8a-7f961671b2de\u003e INFO  com.serverless.dal.Product:107 - Products - get(): product - Product [id=6f1dfeb9-ea08-4161-8877-f6cc724b39e3, name=Product1, price=$9.990000]\nEND RequestId: 34f45684-3dd0-11e8-bf8a-7f961671b2de\nREPORT RequestId: 34f45684-3dd0-11e8-bf8a-7f961671b2de\tDuration: 5147.00 ms\tBilled Duration: 5200 ms \tMemory Size: 1024 MB\tMax Memory Used: 97 MB\n```\n\n## View the Metrics\n\nView the metrics for the service:\n\n```\n$ serverless metrics\n\nService wide metrics\nApril 2, 2018 2:11 PM - April 3, 2018 2:11 PM\n\nInvocations: 2\nThrottles: 0\nErrors: 0\nDuration (avg.): 331.23ms\n```\n\nOr, view the metrics for only one function:\n\n```\n$ serverless metrics --function hello\n\nhello\nApril 2, 2018 2:13 PM - April 3, 2018 2:13 PM\n\nInvocations: 2\nThrottles: 0\nErrors: 0\nDuration (avg.): 331.23ms\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frupakg%2Faws-java-products-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frupakg%2Faws-java-products-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frupakg%2Faws-java-products-api/lists"}