MockServer 마이그레이션 가이드

APIGit

2024-11-14

APIGIT MockServer Migration Guide

소개

2024년 11월 9일, APIGIT은 공식적으로 MockServer 백엔드의 새로운 버전을 출시했습니다.익스프레스.jsNode.js 샌드박스 환경에서 실행됩니다. 이 버전은 개선된 기능, 향상된 유연성, 모의 서버 동작을 정의하는 더욱 강력한 방법을 제공합니다. 그러나 이전 버전(순수 JavaScript 기반)에서 새 버전으로 전환하려면 몇 가지를 해결해야 합니다.변경 사항 중단.

이 가이드는 이러한 변경 사항을 이해하고 기존 모의 서버 프로젝트를 조정하고 새로운 MockServer로 원활하게 마이그레이션하는 데 도움이 됩니다.

주요 변경 사항 및 마이그레이션 세부 정보

새로운 MockServer는 이전 버전과 비교하여 몇 가지 중요한 변경 사항을 도입했습니다. 이러한 변경 사항을 인식하고 프로젝트를 그에 맞게 조정하는 것이 중요합니다.

1. 모의 서버에 대한 URL 변경

이전 URL 형식:your-mockserver.mock.apigit.com

새로운 URL 형식:your-mockserver.mockserver.apigit.com

만약 당신이 가지고 있다면재출판되지 않음새로운 MockServer 출시 이후 모의 서버가 이전 모의 서버로 변경되었습니다.연말까지 계속 일하다. 그러나 당신이 결정하면재출판하다동일한 모의 서버 이름을 사용하여 모의 서버를 만들려면 새 URL 구조를 반영하도록 기존 참조를 모두 업데이트해야 합니다.

당신이 해야 할 일:

  • 모의 서버가 여전히 이전 URL을 사용하고 있는 경우 즉각적인 변경은 필요하지 않으며 다음 때까지 작동 상태를 유지합니다.2024년 12월 31일.
  • 만약 당신이라면재출판하다모의 서버에서 애플리케이션의 모든 엔드포인트, 구성, 참조가 모의 서버의 새 URL을 사용하도록 업데이트되었는지 확인하세요.

:

  • 이전 URL:https://your-mockserver.mock.apigit.com/endpoint
  • 새로운 URL:https://your-mockserver.mockserver.apigit.com/endpoint

클라이언트 애플리케이션, 문서 및 통합에 대한 모든 참조를 업데이트하세요.

2. 라이브러리 가져오기 - 더 이상 글로벌 라이브러리 변수 없음

이전 MockServer에서는 여러 인기 있는 JavaScript 라이브러리가 전 세계적으로 제공되어 명시적인 가져오기 없이 직접 사용할 수 있었습니다. 여기에는 다음이 포함되었습니다.

  • 로다시(_)(v4.17.21) - 일반 유틸리티 기능
  • 순간 js (moment)(v2.30.1) - 시간 및 날짜 처리
  • 가짜 (faker)(v5.5.3) - 데이터 생성기
  • ajv (Ajv)(v6.10.0) - JSON 스키마 검증
  • 검증기 (validator)(v13.12.0) - 검증 도우미

MockServer의 새 버전에서는 이제 이러한 라이브러리가 필요합니다.수동으로 가져옴사용 중require 또는 import사용 전에 모의 스크립트에 문장을 넣어보세요.

당신이 해야 할 일:

  • 적절한 것을 추가하세요require 또는 import모의 스크립트에서 사용되는 지원되는 라이브러리에 대한 명령문입니다.

새로운 MockServer에서 지원되는 라이브러리

새로운 MockServer에는 인기 있는 JavaScript 라이브러리가 사전 설치되어 있습니다. 아래는 지원되는 라이브러리 목록과 사용 방법의 예입니다.

  • @faker-js/페이커(v9.2.0) - 데이터 생성기
  • 조정(v8.17.1) - JSON 스키마 검증
  • 베이스64-js(v1.5.1) - Base64 인코딩/디코딩
  • 코스(v2.8.5) - Cross-Origin Resource Sharing 미들웨어
  • jsonwebtoken(v9.0.2) - JWT 생성 및 검증
  • 로다시(v4.17.21) - 일반 유틸리티
  • 순간(v2.30.1) - 시간 및 날짜 처리
  • 유아이디(v11.0.3) - UUID 생성기
  • 검증기(v13.12.0) - 검증 도우미

사용 예:

var moment = require('moment'); // require
const { faker } = require('@faker-js/faker');
const Ajv = require("ajv");
var validator = require('validator');
const base64 = require('base64-js');
const jwt = require('jsonwebtoken');
const { v4: uuidv4 } = require('uuid');
const _ = require('lodash');

function testLodash() {
  // Test data
  const users = [
    { id: 1, name: 'Alice', age: 25, active: true },
    { id: 2, name: 'Bob', age: 30, active: false },
    { id: 3, name: 'Charlie', age: 35, active: true },
    { id: 4, name: 'David', age: 40, active: false }
  ];

  // Example 1: Filter active users
  const activeUsers = _.filter(users, { active: true });
  console.log('Active Users:', activeUsers);

  // Example 2: Sort users by age in descending order
  const sortedByAge = _.orderBy(users, ['age'], ['desc']);
  console.log('Users sorted by age (desc):', sortedByAge);

  // Example 3: Get the names of all users
  const userNames = _.map(users, 'name');
  console.log('User Names:', userNames);
}

function testMoment() {
  console.log("Current time is:", moment().format());
}

function testUuidv4() {
  console.log("UUID is:", uuidv4());
}

function testAjv() {
  const ajv = new Ajv();
  const schema = {
    type: "object",
    properties: {
      foo: { type: "integer" },
      bar: { type: "string" },
    },
    required: ["foo"],
    additionalProperties: false,
  };
  const data = { foo: 1, bar: "abc" };
  const validate = ajv.compile(schema);
  const valid = validate(data);
  if (!valid) console.log(validate.errors);
}

function testBase64() {
  const text = 'Hello, world!';
  const textBytes = new TextEncoder().encode(text);
  const base64Encoded = base64.fromByteArray(textBytes);
  console.log('Base64 Encoded:', base64Encoded);

  const decodedBytes = base64.toByteArray(base64Encoded);
  const decodedText = new TextDecoder().decode(decodedBytes);
  console.log('Decoded Text:', decodedText);
}

function testValidator() {
  const result = validator.isEmail('fooo~bar.com');
  console.log("fooo~bar.com is email, right?", result);
}

function testFakerJS() {
  return {
    userId: faker.string.uuid(),
    username: faker.internet.username(),
    email: faker.internet.email(),
    avatar: faker.image.avatar(),
    password: faker.internet.password(),
    birthdate: faker.date.birthdate(),
    registeredAt: faker.date.past(),
  };
}

function testJwt() {
  const SECRET_KEY = 'your-secret-key';
  const payload = { userId: 123, username: 'testUser' };
  const token = jwt.sign(payload, SECRET_KEY, { expiresIn: '1h' });
  console.log('Generated Token:', token);
  try {
    const decoded = jwt.verify(token, SECRET_KEY);
    console.log('Decoded Payload:', decoded);
  } catch (err) {
    console.error('Token verification failed:', err.message);
  }
}

mock.define("/testlibs", "GET", function (req, res) {
  console.log("==== this is a test of libs supported =====");
  testLodash();
  testMoment();
  testUuidv4();
  testAjv();
  testValidator();
  testBase64();
  testJwt();
  const jsonData = testFakerJS();
  return res.status(200).json(jsonData);
});