Building a RESTful API with Java Spring Boot
Tags: javascript, rest, api, tutorial
Published: 2023-04-07 20:10:36

Spring Boot is a popular framework for creating powerful RESTful APIs, and in this tutorial, we will use it to develop a simple API that simulates a credit score rating. The API endpoint we will create will allow a user to retrieve a credit score rating by sending a request to the API. However, it is important to note that we will not be linking up to any actual backend systems to pull a real credit score, instead we will use a random number generator to generate the score and return it to the user. Although this API is relatively simple, it will demonstrate the basics of REST API development using Java and Spring Boot. This tutorial will provide a hands-on introduction to building RESTful APIs with Java Spring Boot.

### Prerequisites

Before we start, we must ensure that a couple of prerequisites are completed. To follow along and run this tutorial, you will need:

- A working Java installation
- Gradle or Maven build tools installed (we'll be using Gradle)
- An IDE or text editor of your choice
- Postman to test our endpoint

## Creating the Initial Project

We'll be using the [Spring Initializr](https://start.spring.io) tool to create our initial project. The Spring Initializr generator provides many options allowing for quick customizations to our starter project.

The options include:

- **Project**
  - The type of build tool to be used with the project
- **Language**
  - The language the project will use
- **Spring Boot**
  - The Spring Boot version to use
- **Project Metadata**
  - **Group name**
    - Uniquely identifies your project across all projects
  - **Artifact name**
    - The name of the jar without version
  - **Name**
    - Name of the project
  - **Description**
    - A description for the project
  - **Package name**
    - The name for the package, typically a combination of the group and artifact name
  - **Packaging type**
    - The type of package that is created when building your project
  - **Java Version**
    - The version of Java to be used in the project

- **Dependencies**
  - Select and include many dependencies from developer tools and databases to web and security frameworks

We'll be using the following settings for our project:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1vug6rs4p26pxwp5873x.png)

Selecting _Generate_ will initiate a download for the sample project. Unzip and open the folder generated by Spring Initializr, in our case called RESTDemo, in your favorite editor. This is where we will add our API code. Run the following command to ensure our project builds correctly out of the gate.

```shell
./gradlew build
```

## Adding in The Code

Under the path `/src/main/java/com/example/RESTDemo` we'll create a file called `APIController.java`. This is where we will house our `creditScore` endpoint as well as the code to randomly generate the return value.

Populate the newly created file with the following code:

```java
package com.example.RESTDemo;

import java.util.Random;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class APIController {

  @RequestMapping("/creditscore")
  @ResponseBody
  public String creditscore() {
    int creditScoreMin = 500;
    int creditScoreMax = 900;

    Random rand = new Random();
    int randomCreditScore = rand.nextInt(creditScoreMin, creditScoreMax);

    return String.format("{ \"credit_score\": \"%d\" }", randomCreditScore);
  }
}
```

The `@RestController` annotation is a specialized version of the `Controller` annotation in Spring MVC. It's used to create RESTful web services using Spring. This annotation tells Spring that this class is a controller class that should handle incoming web requests.

Inside this class, there's a single method called `creditscore()` which is annotated with `@RequestMapping("/creditscore")`. The `@RequestMapping` annotation maps the method to a specific URI, in this case, it's `localhost:8080/creditscore`.

This method is also annotated with `@ResponseBody`. The `@ResponseBody` annotation tells Spring to bind the return value of this method to the body of the HTTP response.

The method body of `creditscore()` declares two integers `creditScoreMin` and `creditScoreMax`. By utilizing the `Random` object instance we created, we will generate a number between `creditScoreMin` and `creditScoreMax`. Finally returns a JSON string representation of the generated credit score.

Also, it's worth noting that this code does not handle any request parameters as it does not take any input from the user, this make this end-point an example of a simple end-point.

## Running and Testing the API

With our code written run the following command in order to compile our project into an executable `.jar` file.

``` shell
./gradlew build
```

Now, let’s run our simple web API by using the following command in the root directory of the app.

``` shell
java -jar build/libs/RESTDemo-0.0.1-SNAPSHOT.jar
```

The API is now operational and ready for testing. You can use a tool like Postman to send an HTTP request to the API. The endpoint to get a credit score is `localhost:8080/creditscore`. When you send a request to this endpoint, you should receive a `200 OK` status code as well as a credit score generated by the random number generator.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b107tr4dy6vs4nmqr18z.png)

## Wrapping Up

In summary, we have developed a basic RESTful API using Java Spring Boot. This code can serve as a foundation for creating more complex APIs for your application. As you continue to develop the API, you may want to consider implementing security measures such as an API key, integrating with an API gateway, [monitoring the usage of the API](https://www.moesif.com/features/api-analytics?utm_campaign=DevTo&utm_source=placed-article&utm_medium=body-cta&utm_content=jaca-boot-rest-api), or generating revenue through [API monetization](https://www.moesif.com/solutions/metered-api-billing?utm_campaign=DevTo&utm_source=placed-article&utm_medium=body-cta&utm_content=jaca-boot-rest-api). If you are interested in exploring options for API analytics and monetization check out [Moesif](https://www.moesif.com/wrap?onboard=true&utm_campaign=DevTo&utm_source=placed-article&utm_medium=body-cta&utm_content=jaca-boot-rest-api).