Tìm kiếm trang web

node.js - cách đúng để tạo một dịch vụ web swagger trong TypeScript là gì


Tôi là một phần của một dự án viết bằng TypeScript và tôi đang cố gắng thêm Máy chủ Web TypeScript mà sẽ tương thích với Swagger.
Chiến lược cơ bản nhất để triển khai nó là gì, cân nhắc đến khả năng bảo trì dễ dàng.

  • Đối với Typescript, tôi nhận thấy rằng tồn tại thư viện 'Typson' để tạo mô hình JSON từ giao diện TypeScript.

  • Đối với Swagger, tôi đã thử sử dụng thư viện 'swagger-node-restify', vì nó hỗ trợ thêm các mô hình JSON vào swagger.

Tuy nhiên, tôi gặp một số vấn đề:

  1. Typson không hỗ trợ cú pháp Import của TypeScript - (import {Server} from "restify")
  2. Tôi đã thử triển khai ví dụ 'swagger-node-restify' (Ví dụ Pet), tuy nhiên RESPONSE của yêu cầu GET localhost:8080/api-docs.json lại thiếu tất cả dữ liệu SPEC của API. {"apiVersion":"0.1","swaggerVersion":"1.1","basePath":"http://localhost:8080","apis":[{"path":"/api-docs.{format}/pet","description":"none"}]}

Câu trả lời #1

Tôi đề xuất mô tả một API tuân thủ Swagger bằng yaml hoặc json và tạo máy chủ từ đó.

swagger-server có thể xây dựng API trên express theo thời gian thực (không tạo mã nguồn).

Có trình tạo mã JavaScript :

  • Gọi client swagger-codegen với -l nodejs-server

  • swagger-node là một lựa chọn thay thế tuyệt vời nhưng dường như khó tích hợp với TypeScript

Câu trả lời #2

Vâng, bạn có thể dễ dàng tạo các tài liệu Swagger và OpenAPI từ các kiểu TypeScript của bạn bằng cách sử dụng tsoa. Tệp readme chứa tất cả thông tin cài đặt mà bạn cần để bắt đầu sử dụng nó. Nó tương thích với express, hapi, koa và nhiều hơn nữa (thông qua khả năng thêm mẫu riêng của bạn cho loại máy chủ ưa thích của bạn):

https://github.com/lukeautry/tsoa

Những ưu điểm mà tsoa có so với các thư viện khác là:

  • nó vừa tạo ra tài liệu swagger/OpenAPI vừa xác thực các loại dữ liệu tại thời gian chạy

(Minh bạch hoàn toàn: Tôi là một trong những người duy trì tsoa. Nhưng ban đầu tôi là người sử dụng tsoa và tôi thấy nó là một sản phẩm tuyệt vời... đó là lý do tại sao tôi đã đề nghị giúp duy trì nó! :) )

Bài viết liên quan