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 风格的后端服务

相关推荐
磊叔的技术博客27 分钟前
随笔小记:SpringBoot 3 集成 SpringDoc OpenAPI
spring boot·后端
JohnYan43 分钟前
Bun技术评估 - 05 SQL
javascript·后端·bun
喵个咪1 小时前
开箱即用的GO后台管理系统 Kratos Admin - 后端权限控制
后端·go·api
用户6757049885021 小时前
如何判断两张图片的相似度?原来图片对比也可以如此简单!
后端
轻松Ai享生活1 小时前
超越可观察性:使用 eBPF 修改系统调用行为
后端
一眼万年041 小时前
Kafka ReplicaManager 深度解析:副本管理的核心引擎
后端
梁凌锐1 小时前
重构手法——代码健壮性增强类 | 防御性编程 | 引入断言
后端
闲敲棋子落灯华1 小时前
java学习笔记(三)--java包的引入、访问控制、类的继承、super关键字、重载、重写、运算符、拆箱
java·后端
程序员岳焱1 小时前
Java 使用 Spring AI 的 10 个实用技巧
java·后端·程序员
Jooolin2 小时前
Flask 入门到实战(2):用 SQLAlchemy 优雅操作数据库
后端·flask·ai编程