Backend Development 10 min read

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.

macrozheng
macrozheng
macrozheng
Accelerate Java API Development with magic-api: No Controllers Needed

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>&lt;dependency&gt;
    <groupId>org.ssssssss</groupId>
    <artifactId>magic-api-spring-boot-starter</artifactId>
    <version>1.0.2</version>
&lt;/dependency&gt;
</code>

Configure the data source and magic‑api settings in

application.yml

:

<code>spring:
  datasource:
    url: jdbc:mysql://localhost:3306/magic_api?useUnicode=true&amp;characterEncoding=utf-8&amp;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_brand

for 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

assert

module 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.xml

and configure them in

application.yml

:

<code>&lt;dependency&gt;
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
&lt;/dependency&gt;
&lt;dependency&gt;
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
&lt;/dependency&gt;
</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.html

to 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.

JavaSpring BootAPICRUDSwaggermagic-api
macrozheng
Written by

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.

0 followers
Reader feedback

How this landed with the community

login Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.