Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

A light-weight library to help you create APIs on the fly using express.js written in TypeScript

NotificationsYou must be signed in to change notification settings

naseif/API-Tools-TS

Repository files navigation

A modern, type-safe, light-weight library to help you create APIs quickly using Express.js, written in TypeScript.

npm versionTypeScript

🚀 Features

  • Type-safe: Full TypeScript support with comprehensive type definitions
  • Easy to use: Simplified Express.js API for beginners
  • Flexible: Support for middleware, parameter validation, and bulk route registration
  • Modern: Promise-based with async/await support
  • Secure: Built-in security middlewares (helmet, cors)
  • Configurable: Extensive configuration options

📦 Installation

npm install api-tools-ts

🏃‍♂️ Quick Start

TypeScript

import{APIController}from"api-tools-ts";constapi=newAPIController("/api/v1",{port:3000,useDefaultMiddlewares:true});api.addEndpoint("/","get",(req,res)=>{res.json({message:"Hello World!"});});awaitapi.startServer();

JavaScript

const{ APIController}=require("api-tools-ts");constapi=newAPIController("/api/v1");api.addEndpoint("/","get",(req,res)=>{res.json({message:"Hello World!"});});api.startServer();

📖 Examples

Basic API with Multiple Endpoints

import{APIController}from"api-tools-ts";constapi=newAPIController("/api/v1");// Simple GET endpointapi.addEndpoint("/","get",(req,res)=>{res.json({message:"Welcome to the API!"});});// Parameterized endpointapi.addEndpoint("/users/:id","get",(req,res)=>{constuserId=req.params.id;res.json({ userId,message:`User${userId} profile`});});awaitapi.startServer();

Multiple HTTP Methods on Single Endpoint

import{APIController}from"api-tools-ts";constapi=newAPIController("/api/v1");constgetUsers=(req,res)=>{res.json({users:[],message:"All users"});};constcreateUser=(req,res)=>{res.status(201).json({message:"User created",user:req.body});};constdeleteUser=(req,res)=>{res.json({message:"User deleted"});};api.addMultipleMethods("/users",["get","post","delete"],[getUsers,createUser,deleteUser]);awaitapi.startServer();

Bulk Route Registration

import{APIController,RouteDefinition}from"api-tools-ts";constapi=newAPIController("/api/v1");constroutes:RouteDefinition[]=[{path:"/users",method:"get",handler:(req,res)=>res.json({users:[]})},{path:"/users",method:"post",handler:(req,res)=>res.status(201).json({user:req.body})},{path:"/health",method:["get","head"],handler:[(req,res)=>res.json({status:"ok"}),(req,res)=>res.status(200).end()]}];api.addRoutes(routes);awaitapi.startServer();

Custom Middlewares

import{APIController}from"api-tools-ts";constapi=newAPIController("/api/v1");// Add custom middlewareapi.addMiddleware("logger",(req,res,next)=>{console.log(`${newDate().toISOString()} -${req.method}${req.path}`);next();});// Add authentication middlewareapi.addMiddleware("auth",(req,res,next)=>{consttoken=req.headers.authorization;if(!token){returnres.status(401).json({error:"Token required"});}next();});api.addEndpoint("/protected","get",(req,res)=>{res.json({message:"This is a protected route"});});awaitapi.startServer();

Parameter Validation

import{APIController}from"api-tools-ts";constapi=newAPIController("/api/v1");// Add parameter validationapi.addParamChecker("id",(req,res,next,value)=>{constid=parseInt(value);if(isNaN(id)||id<=0){returnres.status(400).json({error:"Invalid ID parameter"});}req.params.id=id.toString();// Normalize the parameternext();});api.addEndpoint("/users/:id","get",(req,res)=>{res.json({userId:req.params.id,message:"Valid user ID"});});awaitapi.startServer();

Advanced Configuration

import{APIController}from"api-tools-ts";constapi=newAPIController("/api/v1",{port:8080,hostname:"0.0.0.0",useDefaultMiddlewares:true,cors:{origin:["http://localhost:3000","https://yourdomain.com"],credentials:true},helmet:{contentSecurityPolicy:false},morgan:"combined",jsonLimit:"50mb"});awaitapi.startServer();

Error Handling

import{APIController,ControllerErrors,Errors}from"api-tools-ts";constapi=newAPIController("/api/v1");api.addEndpoint("/error-demo","get",(req,res)=>{// The library will automatically handle ControllerErrorsthrownewControllerErrors("Something went wrong",Errors.CONTROLLER_ERROR,{timestamp:Date.now(),endpoint:"/error-demo"});});awaitapi.startServer();

Server Lifecycle Management

import{APIController}from"api-tools-ts";constapi=newAPIController("/api/v1");api.addEndpoint("/","get",(req,res)=>{res.json({message:"Hello World!"});});// Start the serverawaitapi.startServer();// Get server informationconsole.log(api.getServerInfo());// Output: { port: 3000, hostname: 'localhost', mainEndPoint: '/api/v1', isRunning: true }// Check active connectionsconsole.log(`Active connections:${api.getActiveConnections()}`);// Gracefully stop the serverawaitapi.stopServer();// Restart the serverawaitapi.restartServer();// Force stop (for emergencies)api.forceStopServer();

Graceful Shutdown in Production

import{APIController}from"api-tools-ts";constapi=newAPIController("/api/v1");// Set up your routesapi.addEndpoint("/","get",(req,res)=>{res.json({message:"API is running"});});awaitapi.startServer();// Handle graceful shutdown on process signalsprocess.on('SIGTERM',async()=>{console.log('SIGTERM received, shutting down gracefully');try{awaitapi.stopServer();process.exit(0);}catch(error){console.error('Error during shutdown:',error);process.exit(1);}});process.on('SIGINT',async()=>{console.log('SIGINT received, shutting down gracefully');try{awaitapi.stopServer();process.exit(0);}catch(error){console.error('Error during shutdown:',error);process.exit(1);}});

🔧 API Reference

Constructor

newAPIController(endpoint: string,config?:APIControllerConfig)

APIControllerConfig

interfaceAPIControllerConfig{port?:number;// Default: 3000hostname?:string;// Default: 'localhost'useDefaultMiddlewares?:boolean;// Default: truecors?:cors.CorsOptions;// CORS configurationhelmet?:HelmetOptions;// Helmet configurationmorgan?:string|FormatFn;// Morgan logging formatjsonLimit?:string;// JSON payload limiturlEncodedLimit?:string;// URL encoded payload limit}

Methods

Modern API (Recommended)

  • addEndpoint(path, method, callback, middlewares?) - Add a single endpoint
  • addMultipleMethods(path, methods, callbacks) - Add multiple methods to one path
  • addRoutes(routes) - Bulk register routes
  • addMiddleware(id, callback) - Add middleware
  • addParamChecker(param, callback) - Add parameter validation
  • startServer(config?) - Start the server
  • stopServer() - Stop the server gracefully
  • forceStopServer() - Force stop the server immediately
  • restartServer() - Restart the server
  • getServerInfo() - Get server status
  • getEndpoints() - Get all registered endpoints
  • getActiveConnections() - Get current connection count

Legacy API (Backward Compatible)

  • AddEndPoint() - Legacy version of addEndpoint
  • AddMultipleMethods() - Legacy version of addMultipleMethods
  • AddMiddleWare() - Legacy version of addMiddleware
  • AddParamChecker() - Legacy version of addParamChecker

🛡️ Default Middlewares

WhenuseDefaultMiddlewares is true (default), the following middlewares are automatically applied:

  • Morgan: HTTP request logger
  • Helmet: Security headers
  • CORS: Cross-origin resource sharing
  • Express.json(): JSON body parser
  • Express.urlencoded(): URL encoded body parser

📝 Migration from v1.x

The library maintains backward compatibility, but we recommend migrating to the new API:

// Old way (still works)api.AddEndPoint("/users","get",callback);// New way (recommended)api.addEndpoint("/users","get",callback);

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

📄 License

MIT License - see theLICENSE file for details.

📊 Changelog

v2.0.0

  • ✨ Modern async/await API
  • 🔒 Improved type safety
  • 🛡️ Better error handling
  • 📦 Bulk route registration
  • ⚙️ Advanced configuration options
  • 🔄 Backward compatibility maintained

About

A light-weight library to help you create APIs on the fly using express.js written in TypeScript

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp