Koa+Typescript超简单的Restful API

引言

Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。 Koa 并没有捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。

以上内容为koa官方简介译文,但不得不说koa的设计理念和性能的优异性,本文重点讲的是类似koatty 的开源仓库 koa-restful。虽然类似但完全是两种不同的设计理念,koatty大而全,但学习成本和约束比较大,但也相对灵活。koa-restful小而美,仅关注于核心的restful风格Api,并提供依赖注入的能力,其余的能力由更专注的模块提供来实现自由组合。比如:art-template模板引擎来实现页面渲染,typeorm来实现数据库访问读写,以及更多的优秀的开源仓库来帮助你实现各种业务。而koa-restful的依赖注入能力(DI)让你的各个模块可以顺畅衔接,你也可以使用设计模式控制反转来达到插件化运行的目的。

设计理念

解决了javascript弱类型语音不支持反射的问题,通用typescript助力node实现DI的能力,来达到和java、C#等强类型语言一样的能力。在加上js现如今最强大的生态,node的起飞尽在眼前。

轻量高效易用

轻量:依赖官方koa,通过use插件的形式注入KoaRestful框架,即可直接运行不需要复杂的规则。

高效:支持瞬态实例和单例控制器,极度精简的核心代码,让你的应用实现低内存的占用。

易用:简单的几个装饰器即可实现一个Api,比如:

javascript 复制代码
// 创建路由控制器
export declare function Controller(route?: string, lifecycle?: Lifecycle): ClassDecorator;

// 创建Restful请求方法
export declare function HttpGet(route?: string): MethodDecorator;
export declare function HttpHead(route?: string): MethodDecorator;
export declare function HttpOptions(route?: string): MethodDecorator;
export declare function HttpPost(route?: string): MethodDecorator;
export declare function HttpPut(route?: string): MethodDecorator;
export declare function HttpPatch(route?: string): MethodDecorator;
export declare function HttpDelete(route?: string): MethodDecorator;


// 从请求中读取数据
export declare function FromQuery(name: TParam, converter?: ParameterConverterType): ParameterDecorator;
export declare function FromHeader(name: TParam, converter?: ParameterConverterType): ParameterDecorator;
export declare function FromRoute(name: TParam, converter?: Extract<ParameterConverterType, "str" | "num">): ParameterDecorator;
export declare function FromBody(options?: BodyParserOptions): ParameterDecorator;

// 依赖注入(DI)
export declare function Dependency(opts?: DependencyOptions): ClassDecorator;
export declare function AddDependency(dep: Object, opts?: Pick<DependencyOptions, "uniqueId" | "alias">): void;
export declare function Injection(opts?: { uniqueId: string; }): PropertyDecorator;

使用流程

  • NPM依赖
bash 复制代码
# 安装 koa 和 koa-restful
npm install koa @wangminghua/koa-restful

创建index.ts(入口点程序)

less 复制代码
import {
  BaseController,
  Controller,
  FromQuery,
  FromRoute,
  HttpGet,
  KoaRestful,
} from "@wangminghua/koa-restful";
import Koa from "koa";

// 创建一个控制器
@Controller()
class TestController extends BaseController {

  // 创建一个请求,并读取url查询参数,和路径查询参数
  @HttpGet("GetTestParameter/:id")
  GetTestParameter(
    @FromRoute("id") id: string,
    @FromQuery("name") name: string
  ) {
    this.http.ok(`路径参数ID = ${id} 查询参数NAME = ${name}`);
  }
}

const app = new Koa();
app.use(KoaRestful({ logs: true })); // 使用 KoaRestful 插件
app.listen(3000); // 创建 http://localhost:3000
  • 通过npx tsc 命令编译index.ts到dist中,然后执行node ./dist/index.js

源码仓库demo运行示例

在线测试(demo)

传送门 「链接」

传送门(github)

GitHub - WangMingHua111/koa-restful: Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库,使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务

相关推荐
JustHappy8 小时前
古法编程秘籍(二):什么是代码模块化?别背概念,把房间收拾明白就够了
前端·后端
小江的记录本9 小时前
【JVM虚拟机】堆内存分代模型:年轻代(Eden+Survivor)、老年代、元空间Metaspace(附《思维导图》+《面试高频考点清单》)
java·前端·jvm·后端·python·spring·面试
IT_陈寒12 小时前
Python闭包里藏的这个坑,差点让我加班到凌晨
前端·人工智能·后端
IT_陈寒12 小时前
Java注解空指针?这个坑我踩得莫名其妙
前端·人工智能·后端
土狗TuGou13 小时前
SQL内功笔记 · 第8篇:事务的四大特性与隔离级别
数据库·笔记·后端·sql·mysql·oracle
ZengLiangYi13 小时前
React Query + REST API 最佳实践
javascript·后端·react.js
星浩AI13 小时前
项目实战:合同智能审批 · LangGraph + HITL 人机协同方案 [有源码]
后端·langchain·agent
JavaGuide13 小时前
Codex 接入第三方模型 DeepSeek、GLM、Kimi 教程:CC-Switch 和 Codex++ 两种方案对比
后端·ai编程
ZengLiangYi13 小时前
Fastify 加 Electron:把 Web 服务嵌进桌面应用
前端·javascript·后端
李白你好14 小时前
页面资产梳理 · 技术指纹识别 · Spring 端点探测
java·后端·spring