This document describes a lightweight API framework based on Golang, designed to simplify the API development process and provide high performance. The following are the main features of this framework:
- One-click project initialization, rapid development: Provides scaffolding tools that can quickly build project skeletons, reducing initial configuration work and allowing developers to focus on writing business logic.
- Support for graceful restart: Restarts the server without interrupting existing requests, ensuring service continuity, which is very important for online services.
- Automatic route registration: Automatically scans and registers routes without manual configuration, simplifying route management and improving development efficiency.
- Coding-friendly ORM queries, no field mapping required, no need to define return structs: Provides easy-to-use ORM (Object-Relational Mapping) tools to simplify database operations, eliminating the need for manual field mapping. It can also flexibly handle query results without pre-defining return structs, improving development efficiency and flexibility.
- Automatic request parameter validation and data type conversion: Automatically validates the validity of request parameters and performs data type conversion, reducing the amount of manual validation and conversion code, and improving code robustness.
- No need to pass Context in requests: The framework handles Context internally, and developers do not need to explicitly pass Context in business logic, simplifying code writing.
- Exception handling familiar to PHP developers: Provides an exception handling mechanism similar to PHP, making it easy for PHP developers to get started quickly and improve code maintainability.
- Low-intrusion design, existing structs can be exposed as services with one line of code: Has extremely low intrusion into existing code. Existing structs can be exposed as API interfaces with just one line of code, facilitating rapid integration and transformation of existing projects.
- Middleware support: Supports the use of middleware to handle pre- and post-request logic, such as logging, authentication, authorization, etc., improving code reusability and maintainability.
- Loosely coupled modular design: Adopts a modular design, with independent modules that are easy to expand and maintain.
-
Initialize a New Go Module: Create a new Go module for your project.
go mod init api
-
Create a Basic Application File: Create a file named
hello.go
with the following content:package main import ( "github.com/boyxp/nova" "github.com/boyxp/nova/router" ) // Define a struct for your controller type Hello struct {} // Define a method on your struct to handle requests func (h *Hello) Hi(name string) map[string]string { return map[string]string{"name": "hello " + name} } func main() { // Register the controller with the router router.Register(Hello{}) // Start the Nova server on port 9800 nova.Listen("9800").Run() }
-
Install Dependencies: Use
go mod tidy
to install the necessary dependencies.go mod tidy
-
Run the Application: Start your application using:
go run hello.go
-
Test the API: Use
curl
to test the API endpoint:curl -X POST -d 'name=eve' 127.0.0.1:9800/hello/hi
To initialize a complete project structure and manage the application, follow these additional steps:
Run the initialization script to set up the project structure.
curl -s https://raw.githubusercontent.com/boyxp/nova/master/init.sh | sh
Create a new controller in the controller
directory and register it with the router.
package controller
import "github.com/boyxp/nova/router"
// Initialize and register the controller
func init() {
router.Register(Hello{})
}
// Define the controller struct
type Hello struct {}
// Define a method to handle requests
func (h *Hello) Hi(name string) map[string]string {
return map[string]string{"name": "hello " + name}
}
sh manage.sh start
Use curl
to test the new controller's endpoint:
curl -X POST -d 'name=eve' 127.0.0.1:9800/hello/hi
Use the provided manage.sh
script to manage the application process.
-
Start Process:
sh manage.sh start
-
Check Process Status:
sh manage.sh status
-
Smooth Restart (build and restart without interrupting current requests):
sh manage.sh restart
-
Reload Configuration (without build):
sh manage.sh reload
-
Stop Process (after completing current requests):
sh manage.sh stop
-
Upgrade Code and Restart:
sh manage.sh upgrade
-
Cookie Settings: Configure cookie settings in your environment variables (e.g.,
cookie.HttpOnly
,cookie.Secure
,cookie.Path
,cookie.Domain
,cookie.MaxAge
). -
Database Configuration: Register database parameters and create models for database operations.
// Register database parameters database.Register("database", "test", "root:123456@tcp(localhost:3306)/test") // Create a model Goods := database.Model{"database.goods"} // Perform a query Goods.Where("1").Find()