API-ის დოკუმენტაცია, Swagger-ის ინტეგრაცია Node.JS-ში
რეალურ სამყაროში უმეტესწილად პროექტის Front-End და Back-End არის განცალკაევებული და Front-სა და Back-ს შორის კომუნიკაცია Rest API-ების მეშვეობით ხდება.
ოდნავ მოზრდილ პროექტში Back-ის API სერვისების რაოდენობამ შეიძლება 50-საც კი გადააჭარბოს. შესაბამისად Front-End დეველოპერსა და Back-End დეველოპერს შორის თითოეულ ამ სერვისზე კომუნიკაცია უბრალო მიმოწერით, საუბრით და ა.შ. საკმაოდ არაეფექტურია და პროექტის მსვლელობისას ბევრ ცდომილებას, ხარვეზს და უსიამოვნო შემთხვევებს იწვევს.
ზუსტად ამ პრობლემას აგვარებს ხელსაწყო Swagger.
სვაგერი მოკლედ, რომ ვთქვათ არის ჩვენი API-ების Readme ფაილი. ოღონდ სვაგერის Readme-ის მარქდაუნის ნაცვლად YAML-ით ვწერთ.
აღვწერთ თითოეულ ჩვენს API-ის შემდეგი თვისობრიობის მიხედვით:
რა url-ზე უნდა მივაკითხოთ? ( /users )
რა მეთოდის API-ია? (GET, POST, PUT,... DELETE)
რა მარშრუტის პარამეტრები აქვს? (Query Params)
რა Body-ის პარამეტრები აქვს
როგორ პასუხუს უნდა ველოდოთ? რა სტატუს კოდით?
ამ და სხვა ინფორმაციას რაც საჭიროა, რომ Front-End და Back-End დეველოპერს შორის გაზიარდეს აღვწერთ ჩვენს სვაგერის დოკუმენტაციაში YAML ფაილის მეშვეობით.
მეტი ინფორმაციისთვის თუ როგორ უნდა აღვწეროთ API - იხილეთ სვაგერის დოკუმენტაცია
ამასთანავე, სვაგერის ინტერფეისი საშუალებას გვაძლევს თითოეულ ამ სერვისზე რექვესთი გავგზავნოთ და მივიღოთ პასუხი, რაც არანორმალურად მნიშვნელოვანია სერვისების გასატესტად და გასაცნობად.
როგორ ჩავაინტეგრიროთ სვაგერი Node.JS-ში Express-თან ერთად?
არსებობს swagger-ui-express ბიბლიოთეკა, რომელსაც შეუძლია yamljs ბიბლიოთეკასთან ერთად yaml-ის ფაილი შესაბამის სვაგერის ინტერფეისად დაარენდეროს.
დავაინსტალიროთ ჩვენს ლარაველის პროექტში swagger-ui-express და yamljs ბიბლიოთეკები შემდეგი ბრძანებით:
npm install swagger-ui-express yamljs
შემდგომ config საქაღალდეში შევქმნათ swagger.yaml ფაილი:

შემდგომ swagger.yaml-ში ჩავსვათ პატარა სვაგერის სნიპეტი, რომლის საშუალებითაც დავაგენერირებთ სვაგერის ინტერფეისს:
openapi: 3.0.0
info:
title: NodeJS Project
description: Here goes description
version: 0.1.9
servers:
- url: http://localhost:4444/api
description: local server
- url: http://producation.app/api
description: production server
paths:
/users:
get:
responses:
'200':
description: Returns a list of users.
content:
application/json:
schema:
type: array
items:
type: object
properties:
firstName:
type: string
lastName:
type: string
email:
type: string
example:
firstName: gela
lastName: iashvili
email: gela@redberry.ge
ახლა კი შევქმნათ server.js ფაილი პროექტის ძირეულ საქაღალდეში:
const express = require('express')
const Router = require('express').Router
const {faker} = require('@faker-js/faker')
const YAML = require('yamljs')
const swaggerUI = require('swagger-ui-express')
/**
* Load swagger document.
*/
const swaggerDocument = YAML.load('./config/swagger.yaml')
/**
* Create Express server.
*/
const server = express()
/**
* Setting up swagger middleware.
*/
server.use('/api-docs', swaggerUI.serve, swaggerUI.setup(swaggerDocument))
/**
* Create Express Router.
*/
const router = Router()
/**
* Create route which generates random users.
*/
router.get('/api/users', (_, res) => {
let usersCount = faker.random.numeric(2)
const users = []
while(usersCount--)
{
users.push(
{
name: faker.name.firstName(),
email: faker.internet.email(),
image: faker.internet.avatar(),
}
)
}
res.json(users)
});
/**
* Register express router.
*/
server.use(router)
/**
* Listen for incoming connection.
*/
server.listen(4444, () => console.log('Server started at http://localhost:4444'))
გავუშვათ express-ის სერვერი ბრძანებით:
node server.js
და ვესტუმროთ url-ს http://localhost:4444/api-docs სადაც რეალურად დავინახავთ სვაგერის ინტერფეისს:

რეალურად სვაგერის ინტერფეისის გენერაციისათვის საქმეს აკეთებს შემდეგი კოდი:
const express = require('express')
const Router = require('express').Router
const YAML = require('yamljs')
const swaggerUI = require('swagger-ui-express')
/**
* Loaded swagger document.
*/
const swaggerDocument = YAML.load('./config/swagger.yaml')
/**
* Express server
*/
const server = express()
/**
* Setting up swagger middleware.
*/
server.use('/api-docs', swaggerUI.serve, swaggerUI.setup(swaggerDocument))
განვიხილოთ რა ხდება:
პირველ რიგში გვაქვს დაიმპორტებული express, express-ის როუტერი, YAML ფაილის პარსერი და Swager-ის ინტერფეისის გენერატორი
მე-9 ხაზზე swaggerDocument-ში ვინახავთ გაპარსულ swagger.yaml ფაილს
14-ე ხაზზე ექსპრესის სერვერს ვქმნით
ხოლო 19 ხაზზე კი კონკრეტულ მარშრუტს('/api-docs') ვანიჭებთ სვაგერის middleware-ებს
ეგ არის 👏
Last updated