From 9c66001947277d805a4b857b2340e6fc63e2cb7b Mon Sep 17 00:00:00 2001 From: Relism Date: Fri, 28 Feb 2025 17:18:49 +0100 Subject: [PATCH] Flash update --- .gitignore | 4 +- flash/advanced/fullstack-development.md | 12 +-- .../handler-default-implementations.md | 97 +++++++++++++++--- flash/assets/hdichain.png | Bin 0 -> 43103 bytes 4 files changed, 90 insertions(+), 23 deletions(-) create mode 100644 flash/assets/hdichain.png diff --git a/.gitignore b/.gitignore index b9510eb..184d1c5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ node_modules -base/.vitepress/dist -base/.vitepress/cache +/.base/.vitepress/dist +/.base/.vitepress/cache /.vitepress/cache/ /.vitepress/dist/ diff --git a/flash/advanced/fullstack-development.md b/flash/advanced/fullstack-development.md index 13803c3..dbc729e 100644 --- a/flash/advanced/fullstack-development.md +++ b/flash/advanced/fullstack-development.md @@ -3,7 +3,7 @@ banner_title: "Flash - Fullstack Development" banner_description: "Build fullstack apps with Flash, frontend and backend in one jar." --- -# 🌐 Fullstack Development with Flash +# 🌐 Fullstack Development Fullstack development involves building both the **front-end** (user interface) and **back-end** (server logic, database) of a web application. A fullstack developer is responsible for the entire application, ensuring a smooth connection between the two layers. @@ -17,7 +17,7 @@ Popular fullstack frameworks include: Developing and packaging a fullstack application can be complex, but **Flash** simplifies the process with built-in tools and **quality-of-life features**. With Flash, you can: - Serve both **frontend** and **backend** from a single application. - Bundle everything into a **single JAR file** for easy deployment. -- Leverage HDIs for **clean, modular and maintainable route logic**. +- Leverage HDI's for **clean, modular and maintainable route logic**. ![Flash Fullstack Development](../assets/flash-fullstack.png) @@ -45,11 +45,11 @@ This guide will cover only some of the most popular javascript frontend build to ### 🛠️ Setting up the Frontend Build Process :::warning -When building a frontend application with a javascript framework that will be served from a subdirectory (e.g., `/app`), you need to specify the homepage in the `package.json` file. This ensures that the frontend assets are correctly loaded from the subdirectory. -Using a subdirectory and forgetting to set the homepage will result in broken asset links and a potentially non-functional frontend. +When building a frontend application with a javascript framework that will be served on a subpath (e.g., `/app`), you need to specify the homepage in the `package.json` file. This ensures that the frontend assets are correctly loaded from the subpath. +Using a subpath and forgetting to set the homepage will result in broken asset links and a potentially non-functional frontend. ```json { - "homepage": "/your-subdirectory" + "homepage": "/your-subpath" } ``` ::: @@ -92,7 +92,7 @@ Using a subdirectory and forgetting to set the homepage will result in broken as Once you have compiled the frontend assets and placed them in the `resources/frontend` folder, you can serve them using Flash's dynamic file server. This server will serve the frontend assets from the JAR's resources folder. ::: info NOTE: The following example is assuming you plan to serve the frontend from the root path (`/`). -If you plan to serve the frontend from a subdirectory (e.g., `/app`), you will need to adjust the endpoint path accordingly by adding a trailing `/*`. +If you plan to serve the frontend from a subpath (e.g., `/app`), you will need to adjust the endpoint path accordingly by adding a trailing `/*`. ::: ```java diff --git a/flash/advanced/handler-default-implementations.md b/flash/advanced/handler-default-implementations.md index 6f355e4..25a2b12 100644 --- a/flash/advanced/handler-default-implementations.md +++ b/flash/advanced/handler-default-implementations.md @@ -1,20 +1,91 @@ --- banner_title: "Flash - Handler Default Implementations" -banner_description: "Leverage HDI's for cleaner and more maintainable route logic." +banner_description: "Leverage HDIs for cleaner and more maintainable route logic." --- # ⚡ Handler Default Implementations (HDI) -HDI's provide an elegant and reliable way to standardize common behaviors across multiple request handlers. -By defining base handlers that extend `RequestHandler` (or even chaining multiple base handlers), you can modularize your logic for aspects like authentication, user data retrieval, and rate limiting. +Handler Default Implementations (HDIs) provide an elegant way to standardize common behaviors across multiple request handlers. By defining base handlers that extend `RequestHandler` (or chaining multiple base handlers together), you can modularize logic for common tasks like authentication, user data retrieval, and rate limiting. + +HDIs are designed using the [Chain of Responsibility pattern](https://en.wikipedia.org/wiki/Chain-of-responsibility_pattern), making it easy to handle requests with layered logic. ## 🔗 How It Works -Instead of implementing repeated logic in every handler, you create abstract handler classes that encapsulate common functionality. Your actual route handlers then extend these base classes, inheriting their behavior while focusing purely on request-specific logic. +Instead of repeating the same logic in each handler, create abstract handler classes that define common functionality. Your handler implementations then extend these base classes, inheriting the shared behavior while implementing the request-specific logic. + +### Semantics of an HDI + +Creating an HDI is simple, but it's useful to follow some guidelines for clarity and maintainability: + +1. ### **Base HDI Class**: + - **Extends**: The base HDI class should extend `RequestHandler`. + - **Constructor**: The constructor must call the super constructor with `Request` and `Response` objects. + - **Override**: Override the `handle` method to include common behavior. + The `handle` method should return the response to the client and should call the _Abstract Handler Method_, which is implemented by the handler or next HDI in the chain. + ```java + @Override + public Object handle() { + // Common logic here, then call the abstract method + return handleCustom(); + } + ``` + - **Abstract Handler Method**: Define an abstract method that must be implemented by the handler to provide custom logic. It should look like this: + ```java + protected abstract Object handleCustom(); + ``` + - **Protected Fields**: If needed, declare protected fields in the base class to pass data between handlers in the chain. + ::: info + Protected fields are accessible to the handler implementation inside the Abstract Handler Method. + Example HDI : + ```java + public abstract class MyHDI extends RequestHandler { + protected String data; + public BaseHandler(Request req, Response res) { + super(req, res); + } + @Override + public Object handle() { + data = "Some data"; // Set the data + return handleCustom(); + } + protected abstract Object handleCustom(); + } + ``` + + Example Handler Implementation : + + ```java + public class MyHandler extends MyHDI { + public MyHandler(Request req, Response res) { + super(req, res); + } + @Override + protected Object handleCustom() { + // The data is accessible here + System.out.println(data); + return "Response"; + } + } + ``` + ::: + +2. ### **Handler Implementation**: + - **Extends**: The handler should extend the HDI class (or be the final handler in the chain). + - **Constructor**: The constructor should call the super constructor with `Request` and `Response` objects. + - **Implement**: Implement the **Abstract Handler Method** from the HDI. + - **Response Logic**: The response logic should be in the abstract method, and its return value is sent to the client. + ```java + @Override + protected Object handleCustom() { + // Custom logic here + return "Response"; + } + ``` + - **Protected Fields**: The handler implementation can access data from the HDI using the protected fields, **inside** the Abstract Handler Method. ### 🛠 Example: API Key Authentication -Imagine you want to protect API endpoints with an authentication key by checking it against a database. You can create an abstract `APIKeyProtectedHandler` that extends `RequestHandler` and implements the authentication logic: +Now let's go over a simple example to demonstrate how HDIs work. Imagine you need to authenticate API requests by checking an API key. You can create an abstract `APIKeyProtectedHandler` that extends `RequestHandler` and handles the API key authentication: ```java public abstract class APIKeyProtectedHandler extends RequestHandler { @@ -37,18 +108,16 @@ public abstract class APIKeyProtectedHandler extends RequestHandler { return handleAuthorized(); } - // Implement this method in your actual handlers protected abstract Object handleAuthorized(); private boolean isValidApiKey(String key) { // Implement key validation logic, e.g., checking against a database - // ... return true; } } ``` -Now, your actual API handlers only need to extend APIKeyProtectedHandler, ensuring every request has a valid API key before executing its logic: +Now, your API handler implementation only need to extend APIKeyProtectedHandler, ensuring every request has a valid API key before executing its logic: ```java @RouteInfo(method = HttpMethod.GET, path = "/data") @@ -67,8 +136,9 @@ public class GetDataHandler extends APIKeyProtectedHandler { ## 🏗️ Chaining HDIs for Modular Logic -HDIs can be chained together to compose multiple layers of behavior. For example, -imagine you want to authenticate users with a token and fetch their data from a database. You can create two abstract handlers that extend one another: +![HDI Chain](../assets/hdichain.png) + +HDIs can be chained together to create multiple layers of logic. For example, if you need to authenticate a user and fetch their data from a database, you can create two HDIs: - `ProtectedHandler` ensures authentication. @@ -121,14 +191,11 @@ public abstract class AuthenticatedHandler extends ProtectedHandler { } ``` -- Your actual implementation handler `UserProfileHandler` extends `AuthenticatedHandler` and implements `handleWithUser` to ensure the user is authenticated and their profile data has been fetched before proceeding. +- Your handler implementation `UserProfileHandler` extends `AuthenticatedHandler` and implements `handleWithUser` to ensure the user is authenticated and their profile data has been fetched before proceeding. ```java @RouteInfo(endpoint = "/profile", method = HttpMethod.GET) public class UserProfileHandler extends AuthenticatedHandler { - // inherited from AuthenticatedHandler - private String username = user.getUsername(); - public UserProfileHandler(Request req, Response res) { super(req, res); } @@ -136,7 +203,7 @@ public class UserProfileHandler extends AuthenticatedHandler { @Override protected Object handleWithUser() { res.type("application/json"); - return "{\"username\":\"" + username + "\"}"; + return "{\"username\":\"" + user.getUsername() + "\"}"; } } ``` \ No newline at end of file diff --git a/flash/assets/hdichain.png b/flash/assets/hdichain.png new file mode 100644 index 0000000000000000000000000000000000000000..66452584303604b87c2192cefeae1da4f1ee814f GIT binary patch literal 43103 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 literal 0 HcmV?d00001