PedroGeoGISdev wiki
  • Home
  • Linux OS
    • Linux: concepts
    • Linux: basic concepts
    • Linux: Bash
    • Linux: su and sudo
    • Linux: pipes
    • Linux: File System
    • Linux: Virtual Machines

    • Linux: distros
    • Linux Distros: Ubuntu
    • Linux Distros: Mint
    • Linux Distros: Debian
    • Linux Distros: openSuse
    • Linux Distros: Manjaro
    • Linux Distros: Red Hat Enterprise

    • Linux: laboratories
    • Linux Lab#LI01-1: Choose Linux
    • Linux Lab#LI01-2: Install at least three distributions
    • Linux Lab#LI01-3: Adjust user permissions
    • Linux Lab#LI02-1: Export env user with grep and pipe
    • Linux Lab#LI03-1: Manage users and groups
    • Linux Lab#LI03-2: Manage files
    • Linux Lab#LI03-3: Manage software
    • Linux Lab#LI03-4: Manage hardware
    • Linux Lab#LI04-1: Bash scripting, qtool
    • Linux Lab#LI04-2: Bash scripts as terminal tool
    • Linux Lab#LI04-3: Distribute the terminal app

    • Linux readings
    • Linux Resources
  • DevOps
    • What is DevOps
    • DevOps: Introduction
    • DevOps: Agile and Microservices
    • Infrastructure as code (IaC)
    • Immutable Infrastructure
    • Software Lifecycle

    • Documentation
    • How to document: Quarto and Obsidian

    • Network protocols
    • Network: Basics
    • Network: Client-server
    • Network Protocols
    • Network: DNS
    • Network: API Rest
    • Network: gRPC
    • Network: Websocket
    • Network: SMTP
    • Network: Ping
    • Network: UDP
    • Network: webhook
    • Network: SOAP
    • Network: graphQL

    • Version Control
    • Git
    • GitHub
    • Idea and GitHub 2023
    • Git and GitHub 2023 CLI

    • IDEs
    • IDE: Visual Code
    • IDE: IntellJIdea

    • DevOps tools
    • Amazon Web Services AWS
    • Docker
    • Jenkins pipelines
    • Kubernetes k8s
    • Digital Ocean
    • Nagios
    • Ansible

    • DevOps Laboratories
    • Lab 1: chat App
    • Lab 2: Spring Boot AWS AEB manually
    • Lab 3: Spring Boot and AWS S3 publisher
    • Lab 4: Spring Boot Docker/Jenkins
    • Lab 5: k8s on Digital Ocean
    • Lab 6: Spring Boot AWS codecommit

    • DevOps readings
    • DevOps Resources
  • MarkUp
    • MarkUp Languages
    • Introduction Markup
    • HTML Markup
    • Markdown Markup
    • Markdown and HTML working together, good idea?

    • Quarto Markdown
    • Quarto Markdown: basics
    • Quarto Markdown: creating
    • Quarto Markdown: publishing
    • Quarto Markdown: code & data
    • Quarto Markdown: api rest call
    • Quarto Markdown: OJS Cells
    • Quarto Markdown: cheat-sheet

    • Styling: CSS
    • Cascade Style Sheet
    • Cascade Style Sheet: Box Model and Containers
    • CSS: W3.css

    • MarkUp Languages Laboratories
    • Lab#MD01-1: Create and publish by Quarto

    • MarkUp Languages readings
    • MarkUp Languages Resources
  • Java SE
    • What is Java SE
    • Java Standard Edition: Basics
    • Java Standard Edition: Principles
    • Java MOOC Helsinki
    • Java MOOC Helsinki Syllabus

    • Java Create Project
    • Java SE: Maven
    • Java SE: Create Maven Project
    • Java SE: Project push GitHub
    • Java SE: JUnit and TDD

    • Java Concepts
    • Java SE: Class and Objects
    • Java SE: Scope
    • Java SE: static modifier
    • Java SE: Coupling and DDD
    • Java SE: Packages
    • Java SE: Abstract/Interface
    • Java SE: Java 8

    • Java Principles
    • Java SE: Encapsulation
    • Java SE: Abstraction
    • Java SE: Inherence
    • Java SE: Polymorphism

    • Java Design Patterns
    • Java Patterns: UML
    • Java Patterns: Types
    • Singleton
    • Factory
    • Abstract Factory
    • Builder
    • Facade
    • Bridge
    • Decorator
    • Composite
    • Observer
    • Strategy
    • State
    • Commander

    • Java SE Laboratories
    • Lab#SE00-1: Maven Person
    • Lab#SE00-2: Maven Clinic
    • Lab#SE00-3: Library Model
    • Lab#SE00-4: Abstract/Interface Human
    • Lab#SE01-1: Maven/Gradle Person and Account
    • Lab#SE01-2: Maven/Gradle Person and Account stored in JSON
    • Lab#SE02-1: Movie/Review, Model
    • Lab#SE02-2: Movie/Review, CRUD Operations
    • Lab#SE02-3: Movie/Review, factory
    • Lab#SE02-4: Movie/Review, interactivity and coupling
    • Lab#SE02-5: Movie/Review, simulate interactivity by console
    • Lab#SE03-1: Library/Book, Core-Model
    • Lab#SE03-2: Library/Book, Sprint Zero
    • Lab#SE03-3: Library/Book, Expand Model
    • Lab#SE04-1: healthyFood Restaurant, Core Model

    • Java SE readings
    • Java SE Resources
  • Python
    • Python Basics
    • Python: Basic Concepts
    • Python: Tips
  • JavaScript
    • JavaScript Basics
    • JavaScript: Basic Concepts
    • JavaScript: Tips
  • Spring
    • Spring Legacy
    • Spring Framework
    • Spring MVC
    • Springs Servlets

    • Spring Boot Basics
    • Spring Boot: fundamentals
    • Spring Boot: create a Project
    • Spring Boot: H2 DB and Thymeleaf
    • Spring Boot: cycle

    • Spring Boot Concepts
    • Spring Boot: Dependency Injection
    • Spring Boot: Annotations
    • Spring Boot: Controller
    • Spring Boot: View
    • Spring Boot: Thymeleaf
    • Spring Boot: Vaadin Flow
    • Spring Boot: Vaadin Hilla
    • Spring Boot: Model
    • Spring Boot: Rest
    • Spring Boot: Data & DB
    • Spring Boot: JPA & DI
    • Spring Boot: JPA Mappings
    • Spring Boot: JPA Relationships
    • Spring Boot: JPA Queries
    • Spring Boot: JPA Inherence
    • Spring Boot: Scaling

    • Spring Boot Laboratories
    • Lab#SB00-1: Library UML
    • Lab#SB00-2: CRUD User
    • Lab#SB00-3: LibraryManagement
    • Lab#SB00-4: API Rest
    • Lab#SB00-5: Rest & JPA-H2
    • Lab#SB00-6: Rest & MongoDB
    • Lab#SB00-7: Styling
    • Lab#SB01-1: DataBase
    • Lab#SB02-1: JPA Relationships
    • Lab#SB03-1: APIs & cloud
    • Lab#SB04-1: JPA Inherence
    • Lab#SB05-1: API Rest
    • Lab#SB06-1: employeeCourse
    • Lab#SB07-1: monitor Book
    • Lab#SB08-1: Restaurant UML
    • Lab#SB08-2: Vaadin
    • Lab#SB08-3: H2 and API Rest
    • Lab#SB08-4: JPA
    • Lab#SB08-5: Test API Rest
    • Lab#SB09-1: SpringIO Conference

    • Spring Boot readings
    • Spring Boot Resources
  • ReactJS
    • ReactJS: Principles
    • React JS: Introduction
    • React JS: render virtual DOM
    • React JS: Create a React project
    • React JS: Components
    • React JS: JSX
    • React JS: props and state

    • JavaScript: web scripting
    • JavaScript: basics
    • JavaScript: functions
    • JavaScript: objects
    • JavaScript: variables
    • JavaScript: flux control

    • ES6: ECMAScript 6
    • React JS ES6: arrow functions
    • React JS ES6: import modules
    • React JS ES6: array, data and key
    • React JS ES6: destructuring
    • React JS ES6: spread operator

    • ReacJS 18: Hooks
    • React JS: Rules of Hooks
    • ReactJS: useState
    • React JS: useReducer
    • React JS: useRef
    • React JS: useEffect
    • React JS: useContext
    • ReactJS: useMemo
    • ReactJS: custom hooks

    • ReactJS: Designing an App
    • React JS App: async
    • React JS App: events
    • React JS App: router
    • React JS App: conditional render
    • React JS App: styling

    • React JS: Laboratories
    • Lab#RE01-1: API Rest Axios
    • Lab#RE02-1: Router & Hooks
    • Lab#RE03-1: to-do app
    • Lab#RE03-2: HighCharts
    • Lab#RE03-3: API Rest Mono
    • Lab#RE03-4: API Rest Domains
    • Lab#RE03-5: data management
    • Lab#RE04-1: todo & server
    • Lab#RE04-2: Spring Boot & ReactJS
    • Lab#RE05-1: chat & websockets
    • Lab#RE05-2: chat: backend
    • Lab#RE05-3: chat & AWS
    • Lab#RE05-4: chat: test ws AWS
    • Lab#RE05-5: chat & front
    • Lab#RE05-6: chat & ws: front
    • Lab#RE06-1: healthyFood Restaurant
    • Lab#RE06-1-PR: create a pull request
    • Lab#RE07-1: traffic lights simulation

    • React JS readings
    • ReactJS Resources
  • Learning
    • Vocabulary
    • General Vocabulary
    • SCRUM Vocabulary
    • DevOps Vocabulary
    • Java SE Vocabulay
    • Spring Boot Vocabulary
    • DataBase Vocabulary
    • ReactJS Vocabulary
    • Web Vocabulary

    • Learning
    • Useful Questions
    • Learning: tips
    • Writing
    • Taking Notes
    • Comments
    • Document
    • Auto-Evaluate

    • Books & Articles
    • Books
    • Articles

    • What is SCRUM
    • SCRUM Agile Methodology
    • Agile Manifesto & Values
    • SCRUM Guide

    • Scrum Steps
    • Meetings, Impediments and Iterations
    • User stories, Tasks and Habits
    • Delivering Value & Communication
    • ScrumMaster, how it works
    • Mindset, the key to everything
    • Product Owner, how it works
    • Managing Time & Mind
    • Team & the Specialist
    • Albertus’ Dilemma
    • Before SCRUM
    • Team Dynamics
    • Emotions and Thoughts
    • Decision Making and Intuition
    • Beyond SCRUM
    • Balances, atmosphere and tools

    • Resources
    • SCRUM Resources
  • QGIS
    • QGIS basics
    • QGIS: basic concepts

    • QGIS laboratories
    • QGIS Laboratory 1: Introduction to Open Source GIS
  • ArcGIS Pro
    • ArcGIS Pro basics
    • ArcGIS Pro: basic concepts

    • ArcGIS Pro laboratories
    • ArcGIS Pro Laboratory 1: Getting Started
  • Bookmarks
    • Online Resources
    • Online Resources
  • About
    • About me and this site
    • About me
    • About this site
    • About images credit
  • Email
  • GitHub
  • LinkedIn
  1. React JS: Laboratories
  2. Lab#RE04-1: todo & server
  • ReactJS

  • ReactJS: Principles
    • React JS: Introduction
    • React JS: render virtual DOM
    • React JS: Create a React project
    • React JS: Components
    • React JS: JSX
    • React JS: props and state

  • JavaScript: web scripting
    • JavaScript: basics
    • JavaScript: functions
    • JavaScript: objects
    • JavaScript: variables
    • JavaScript: flux control

  • ES6: ECMAScript 6
    • React JS ES6: arrow functions
    • React JS ES6: import modules
    • React JS ES6: array, data and key
    • React JS ES6: destructuring
    • React JS ES6: spread operator

  • ReacJS 18: Hooks
    • React JS: Rules of Hooks
    • ReactJS: useState
    • React JS: useReducer
    • React JS: useRef
    • React JS: useEffect
    • React JS: useContext
    • ReactJS: useMemo
    • ReactJS: custom hooks

  • ReactJS: Designing an App
    • React JS App: async
    • React JS App: events
    • React JS App: router
    • React JS App: conditional render
    • React JS App: styling

  • React JS: Laboratories
    • Lab#RE01-1: API Rest Axios

    • Lab#RE02-1: Router & Hooks

    • Lab#RE03-1: to-do app
    • Lab#RE03-2: HighCharts
    • Lab#RE03-3: API Rest Mono
    • Lab#RE03-4: API Rest Domains
    • Lab#RE03-5: data management

    • Lab#RE04-1: todo & server
    • Lab#RE04-2: Spring Boot & ReactJS

    • Lab#RE05-1: chat & websockets
    • Lab#RE05-2: chat: backend
    • Lab#RE05-3: chat & AWS
    • Lab#RE05-4: chat: test ws AWS
    • Lab#RE05-5: chat & front
    • Lab#RE05-6: chat & ws: front

    • Lab#RE06-1: healthyFood Restaurant
    • Lab#RE06-1-PR: create a pull request

    • Lab#RE07-1: traffic lights simulation

  • React JS readings
    • ReactJS Resources

On this page

  • 1 Overall
  • 2 API REST Server with Feathers
    • 2.1 Creating a project
      • 2.1.1 Initial render feathers project
  • 3 API REST Server with Spring Boot
  • 4 API REST Server with AWS
  • Edit this page
  • Report an issue
  1. React JS: Laboratories
  2. Lab#RE04-1: todo & server

Lab#RE04-1: todo & server

ReactJS labs

reactjs
lab
Lab#RE04
labs
Author

albertprofe

Published

Tuesday, June 1, 2021

Modified

Sunday, August 10, 2025

📘 React JS Lab#RE04-1: Feathers JS / Java Spring Boot / AWS

In this lab, we will be using these server frameworks to feed our React Todo app through API Rest.

For many reasons described below the use of a React App with a Spring Boot/Feathers/AWS server is a very good option:

  • feathers, the API and Real-time light Application Framework over Express.
  • Spring Boot: Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”.
  • AWS services to create a serveless in the cloud.


1 Overall

Creating a server for a React Todo application is essential for several reasons:

  • Data Persistence: A server allows you to store and retrieve data from a database or a file system.
    • In the case of a todo application, you need to store the todo items, their status, and any other relevant information.
    • A server enables you to save this data and retrieve it whenever necessary, ensuring that the todos remain persistent even if the user refreshes the page or closes the application.
  • User Authentication: If you want to add user accounts and authentication to your todo application, a server is required.
    • It allows you to handle user registration, login, and session management.
    • With a server, you can securely authenticate users and restrict access to certain features or data based on user permissions.
  • API Integration: In many cases, todo applications need to integrate with external services or APIs.
    • For example, you may want to sync todos with a cloud storage service or send notifications to users.
    • A server acts as an intermediary between your React application and these external APIs, handling the necessary requests and responses.
  • Server-side Operations: Some operations are better suited to be performed on the server side.
    • For instance, if you need to calculate statistics or generate reports based on the todos, it’s more efficient to offload these tasks to the server rather than executing them in the client’s browser.
  • Scalability and Performance: As your todo application grows and handles more users and data, a server allows you to scale your infrastructure to meet the demand.
    • You can distribute the load across multiple servers or utilize cloud services that provide auto-scaling capabilities, ensuring optimal performance and responsiveness.

The Todo React code can be deployed and served using various frameworks and platforms, depending on your specific requirements and preferences. Here are some options:

  1. Spring Boot: Spring Boot is a popular Java-based framework for building web applications. It provides a robust server-side environment for running React code.

  2. Feathers.js: Feathers.js is a lightweight and flexible Node.js framework that enables the creation of real-time applications. It can serve React code effectively.

  3. PHP Laravel: Laravel is a powerful PHP framework known for its elegant syntax and expressive features. It can be used to serve React code alongside server-side logic.

  4. .NET C# Razor: Razor is a view engine that integrates with ASP.NET Core, a framework for building web applications with C#. It provides seamless integration of React code with server-side rendering.

  5. AWS: Amazon Web Services (AWS) offers a range of services for deploying React applications. You can use AWS Amplify, AWS Elastic Beanstalk, or AWS Lambda, depending on your specific needs.

Let’s study three of them as a model of server implementation to our React Todo:

  • a lighter weight one with NodeJS, FeathersJS,
  • a natural leader Java EE, Spring Boot,
  • and a seveless cloud option, AWS

2 API REST Server with Feathers

  • Quick start
  • Node.js CRUD App Using React and FeathersJS

Let’s outline a few strategies we can employ to achieve our objective.

First, you need to create a new Feathers application by running

 npm create feathers <name>

Once the Feathers CLI is installed you may keep with the project.

Since the generated application is using modern features like ES modules, the Feathers CLI requires Node 16 or newer.

You need to define your project.

  • choose if you want to use JavaScript or TypeScript.
  • When presented with the project name, just hit enter, or enter a name (no spaces).
  • Next, write a short description for your application.
  • Confirm the next questions with the default selection by pressing Enter.
  • If you choose a database other than SQLite, make sure it is reachable at the connection string.
  • using MongoDB is nice, so, you should change the database selection.

Once you confirm the last prompt, the final selection should look similar to this:

Prompt feathers

Prompt feathers

2.1 Creating a project

Install

npm install @feathersjs/feathers --save
npm install -g @feathersjs/cli

Help

feathers --help

Creation

albert@albert-virtual-machine:~/MyProjects/MyFeathers/TodoRest$ feathers -V
5.0.5

feathers g app
albert@albert-virtual-machine:~/MyProjects/MyFeathers/TodoRest$ feathers g app
? Do you want to use JavaScript or TypeScript? JavaScript
? What is the name of your application? TodoRest
? Write a short description Backend API Rest for ReactJS Todo
? Which HTTP framework do you want to use? KoaJS (recommended)
? What APIs do you want to offer? HTTP (REST), Real-time
? Which package manager are you using? npm
? Generate client? Can be used with React, Angular, Vue, React Native, Node.js 
etc. No
? What is your preferred schema (model) definition format? Schemas allow to 
type, validate, secure and populate your data and configuration TypeBox 
(recommended)
? Which database are you connecting to? Databases can be added at any time 
MongoDB
? Enter your database connection string 
mongodb+srv://cifo:1234@clustertest.0h5f7.mongodb.net/todo

Create Service

albert@albert-virtual-machine:~/MyProjects/MyFeathers/TodoRest$ feathers generate service
? What is the name of your service? todoapirest
? Which path should the service be registered on? todo
? Does this service require authentication? No
? What database is the service using? MongoDB
? Which schema definition format do you want to use? Schemas allow to type, 
validate, secure and populate data TypeBox  (recommended)
    Wrote file src/services/todo/todo.schema.js
    Wrote file src/services/todo/todo.js
    Updated src/services/index.js
    Wrote file test/services/todo/todo.test.js
    Wrote file src/services/todo/todo.class.js

2.1.1 Initial render feathers project

After install and create, we could execute the project npm start and check the endpoint.

At browser, http://localhost:3030/ (it is the base URL for a Feathers server) we will consume the data.

By making HTTP requests to this endpoint using different methods (GET, POST, PUT, DELETE), along with appropriate paths and parameters, we can perform CRUD (Create, Read, Update, Delete) operations on the corresponding resources exposed by the Feathers server, thus interacting with the API and manipulating data.

After check all CRUD operations are working we will use this endopont to serve our React todo app

initial render on http://localhost:3030/

initial render on http://localhost:3030/

3 API REST Server with Spring Boot

We could create a Spring Boot server. It will publish our todo API Rest with a command-line runner that interacts with a Todo model.

Let’s draw some ideas to approach this solution.

  • Create a new Spring Boot project using your preferred IDE or the Spring Initializr. Include the necessary dependencies for RESTful web services and JPA (Java Persistence API).
  • Create a Todo entity class to represent our Todo model. This class will have the properties id, text, completed, author, and due.
Todo.java
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.util.Date;

@Data
@Entity
public class Todo {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private String id;
    private String text;
    private boolean completed;
    private String author;
    private Date due;

    // Constructors, getters, and setters
}
  • Create a repository interface TodoRepository that extends CurdRepository to handle CRUD operations for the Todo entity.
TodoRepository.java
import org.springframework.data.jpa.repository.CrudRepository;

public interface TodoRepository extends CrudRepository<Todo, String> {
}
  • Create a REST controller TodoController to handle the HTTP requests related to the Todo model.
TodoController.java
import lombok.RequiredArgsConstructor;
import org.springframework.boot.CommandLineRunner;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;

@RestController
@RequestMapping("/todo")
@RequiredArgsConstructor
public class TodoController implements CommandLineRunner {

    private final TodoRepository todoRepository;

    @GetMapping
    public ResponseEntity<List<Todo>> getAllTodos() {
        List<Todo> todos = todoRepository.findAll();
        return new ResponseEntity<>(todos, HttpStatus.OK);
    }

    @PostMapping
    public ResponseEntity<Todo> createTodo(@RequestBody Todo todo) {
        Todo createdTodo = todoRepository.save(todo);
        return new ResponseEntity<>(createdTodo, HttpStatus.CREATED);
    }

    @Override
    public void run(String... args) {
        // Optional: You can add some initial Todos here if needed
        Todo todo1 = new Todo();
        todo1.setText("Example Todo 1");
        todo1.setCompleted(false);
        todo1.setAuthor("John");
        todo1.setDue(new Date());
        todoRepository.save(todo1);
    }
}
  • Run the Spring Boot application, and the RESTful API for managing Todos will be available at http://localhost:8080/todo
  • The command-line runner is implemented in the run method of the TodoController class. You can use it to pre-populate the database with some initial Todos if needed.

4 API REST Server with AWS

AWS Architecture

AWS Architecture

AWS API Gateway, AWS Lambda, and Amazon DynamoDB are indeed a great combination for building a serverless backend for a Todo React app.

Let’s explore some options for addressing this issue.

By combining these AWS services, we can create a scalable and cost-effective serverless backend for our Todo React app.

The architecture eliminates the need for managing servers, allows for automatic scaling based on demand, and provides flexibility in terms of code organization and maintenance.

Additionally, AWS provides monitoring, logging, and security features, ensuring the reliability and security of your application.

Here’s how each component could play a role in this architecture:

  1. AWS API Gateway: API Gateway acts as a front-end to your backend services.
    1. It allows you to create a RESTful API that can receive requests from your Todo React app and route them to the appropriate backend services.
    2. With API Gateway, you can define API endpoints, set up authentication and authorization, perform request validation, and handle rate limiting.
    3. It also integrates well with other AWS services, making it easy to connect with Lambda and DynamoDB.
  2. AWS Lambda: Lambda is a serverless compute service that allows you to run code without provisioning or managing servers.
    1. In the context of a Todo React app, you can write your backend logic as individual Lambda functions. Each function can handle a specific task, such as creating a new task, updating a task, or retrieving a list of tasks.
    2. Lambda functions can be written in various programming languages, including JavaScript, which makes it convenient for integration with your React app.
    3. API Gateway can be configured to trigger the appropriate Lambda function based on the incoming request, and the function can then process the request and return a response.
  3. Amazon DynamoDb: DynamoDB is a fully managed NoSQL database service offered by AWS.
    1. It provides high scalability, low latency, and automatic scaling, making it a great choice for storing and retrieving task data for a Todo app.
    2. DynamoDB organizes data in tables, and each table consists of items (representing tasks in this case) and attributes (representing properties of each task).
    3. You can store and retrieve task data using DynamoDB APIs, and Lambda functions can interact with DynamoDB to perform CRUD operations on the tasks.
Back to top
Lab#RE04-2: Spring Boot & ReactJS

This website is built with Quarto.

Difficulties are just things to overcome, after all. Ernest Shackleton

  • Edit this page
  • Report an issue