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

相关推荐
.生产的驴12 分钟前
Electron Vue框架环境搭建 Vue3环境搭建
java·前端·vue.js·spring boot·后端·electron·ecmascript
爱学的小涛20 分钟前
【NIO基础】基于 NIO 中的组件实现对文件的操作(文件编程),FileChannel 详解
java·开发语言·笔记·后端·nio
爱学的小涛21 分钟前
【NIO基础】NIO(非阻塞 I/O)和 IO(传统 I/O)的区别,以及 NIO 的三大组件详解
java·开发语言·笔记·后端·nio
北极无雪26 分钟前
Spring源码学习:SpringMVC(4)DispatcherServlet请求入口分析
java·开发语言·后端·学习·spring
爱码少年31 分钟前
springboot工程中使用tcp协议
spring boot·后端·tcp/ip
2401_857622668 小时前
SpringBoot框架下校园资料库的构建与优化
spring boot·后端·php
2402_857589368 小时前
“衣依”服装销售平台:Spring Boot框架的设计与实现
java·spring boot·后端
哎呦没10 小时前
大学生就业招聘:Spring Boot系统的架构分析
java·spring boot·后端
_.Switch10 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
杨哥带你写代码11 小时前
足球青训俱乐部管理:Spring Boot技术驱动
java·spring boot·后端