Accelerate Java API Development with magic-api: No Controllers Needed
magic-api is a Java-based rapid API development framework that eliminates the need for traditional Controllers, Services, DAOs, and XML files by providing a UI for defining endpoints, supporting Spring Boot integration, CRUD operations, validation, transactions, result mapping, and Swagger integration, with detailed configuration examples.
magic-api Overview
magic-api is a Java‑based rapid API development framework. It provides a UI where developers can define HTTP endpoints without writing Controllers, Services, DAOs, Mappers, XML or VO classes. The framework automatically maps the UI definitions to HTTP interfaces.
Getting Started
Add the magic‑api starter dependency to
pom.xml:
<code><dependency>
<groupId>org.ssssssss</groupId>
<artifactId>magic-api-spring-boot-starter</artifactId>
<version>1.0.2</version>
</dependency>
</code>Configure the data source and magic‑api settings in
application.yml:
<code>spring:
datasource:
url: jdbc:mysql://localhost:3306/magic_api?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: root
magic-api:
web: /magic/web
resource:
type: database
tableName: magic_api_file
prefix: /magic-api
readonly: false
sql-column-case: camel
page-config:
size: size
page: page
default-page: 1
default-size: 10
</code>Database Setup
Create the table used by magic‑api to store API definitions:
<code>CREATE TABLE `magic_api_file` (
`id` bigint(255) NOT NULL AUTO_INCREMENT,
`file_path` varchar(255) DEFAULT NULL,
`file_content` text,
PRIMARY KEY (`id`)
);
</code>Create a sample business table
pms_brandfor the CRUD demo:
<code>CREATE TABLE `pms_brand` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`big_pic` varchar(255) DEFAULT NULL,
`brand_story` varchar(255) DEFAULT NULL,
`factory_status` bit(1) DEFAULT NULL,
`first_letter` varchar(255) DEFAULT NULL,
`logo` varchar(255) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`product_comment_count` int(11) DEFAULT NULL,
`product_count` int(11) DEFAULT NULL,
`show_status` bit(1) DEFAULT NULL,
`sort` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
</code>CRUD Operations with magic‑script
Insert a new brand (POST
/create):
<code>// body contains the request payload
return db.table('pms_brand').insert(body);
</code>Query a brand by ID (GET
/detail/{id}):
<code>return db.table('pms_brand')
.where()
.eq('id', path.id)
.selectOne();
</code>Update a brand (POST
/update):
<code>return db.table('pms_brand')
.primary('id', body.id)
.update(body);
</code>Paginated list (GET
/page):
<code>return db.table('pms_brand').page();
</code>Delete a brand (POST
/delete/{id}):
<code>return db.update('delete from pms_brand where id=#{id}');
</code>Parameter Validation
Use the
assertmodule to validate required fields:
<code>import assert;
assert.notEmpty(body.name, 400, 'Name cannot be empty!');
assert.notEmpty(body.firstLetter, 400, 'First letter cannot be empty!');
return db.table('pms_brand').insert(body);
</code>Result Transformation
Map query results to a custom structure:
<code>var list = db.table('pms_brand').select();
return list.map(item => ({
name: item.name,
firstLetter: item.firstLetter,
showStatus: item.showStatus ? 'Not Displayed' : 'Displayed'
}));
</code>Transaction Support
Execute multiple statements within a transaction:
<code>import assert;
var val = db.transaction(() => {
var exist = db.table('pms_brand')
.where().eq('id', body.id).selectOne();
assert.notNull(exist, 404, 'Brand not found!');
db.table('pms_brand')
.primary('id', body.id).update(body);
return v2;
});
return val;
</code>Swagger Integration
Add Swagger dependencies to
pom.xmland configure them in
application.yml:
<code><dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
</code> <code>magic-api:
swagger-config:
name: MagicAPI Test Interface
title: MagicAPI Swagger Docs
description: MagicAPI test interface information
version: 1.0
location: /v2/api-docs/magic-api/swagger2.json
</code>Access the Swagger UI at
http://localhost:8080/swagger-ui.htmlto view the generated API documentation.
Conclusion
magic-api offers a lightweight way to develop Java APIs through a UI and simple scripts, covering CRUD, validation, transactions, result mapping, and Swagger integration, though it remains a niche framework with room for growth.
macrozheng
Dedicated to Java tech sharing and dissecting top open-source projects. Topics include Spring Boot, Spring Cloud, Docker, Kubernetes and more. Author’s GitHub project “mall” has 50K+ stars.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.