Как изящно использовать Mock Server

Webpack

Обновление 20.06.2020 15:52:52

Несколько месяцев назад я сел на машину YApi.

Поскольку rap2 был обновлен, библиотека была изменена, не могла поддерживаться и не поддерживала ldap. Но нельзя отрицать, что он поддерживал развитие бизнеса более 1 года.

Потрясающий.

YApi также удобен в использовании и более удобен для тестирования. Я развернул его вручную, и докер очень круто развернуть, но MongoDB в облаке стоит дорого, можно установить только локальную, и она будет автоматически копироваться каждый день, чтобы избежать потери данных.

Ссылки прикреплены здесь.

github.com/YMFE/yapi

Это произошло по причине

Вчера я обсуждал со своими коллегами, что мы используемrap2(проект с открытым исходным кодом, который объединяет написание интерфейса и фиктивный сервер) и только что запущенный легкий фиктивный сервер, который прост в использовании.

В основном мы обсуждаем два: согласованность интерфейса, отсутствие инвазивности кодирования.

задний план

Поскольку front-end и back-end разделены, а разделение труда между front-end и back-end завершено, каждый может выполнять свои обязанности и развиваться параллельно. Стандартом протокола передней и задней частей является документ интерфейса. Вся логика и представление внешнего интерфейса зависят от структуры данных, указанной в документе интерфейса. Поэтому документация интерфейса стала главным приоритетом процесса разработки.

Конечно, одного документа мало, есть много проблем, таких как отладка логики страницы разработки интерфейса, тестирование интерфейсов одноклассников, постоянное обновление документов интерфейса, сложные возвраты интерфейса, для этого требуется Mock Server.

Для получения дополнительной информации о фиктивном содержимом, пожалуйста, погуглите сами, и я не буду вдаваться в подробности.

согласованность интерфейса

Документ интерфейса является соглашением и основой всего процесса разработки, поэтому синхронное обновление документа также стало ключевой частью.

Задолго до

Используйте уценку для ведения документа и распространения его среди всех после обновления; или поместите его в вики для управления и обновляйте его в вики каждый раз, чтобы все могли его прочитать. Если вам нужны фиктивные данные (easy-mock или другие фиктивные серверы), соответствующий персонал изменяет фиктивное поле, и обновление завершается.

элегантный подход

Интерфейс онлайн-редактирования, сохранение в реальном времени, синхронное обновление. Например, при использовании Rap2 (поддерживает репликацию JSON и поддерживает мобильную репликацию интерфейсов) документ интерфейса сохраняется после сохранения, и все обновляют его в режиме реального времени, а данные Mock обновляются автоматически.

неинвазивное кодирование

Чем менее навязчив код с Mock, тем ниже наши затраты на обслуживание и разработку. кVue-cli2.xПример сгенерированного проекта:

каталог config в проектеdev.env.js, настроить адрес источника данных API в среде разработки

...
module.exports = merge(prodEnv, {
    NODE_ENV: '"development"',
    ENV_CONFIG: '"dev"',
    // BASE_API: '"dev server"',
    BASE_API: '"http://rap2.taobao.org:8080/app/mock/39"', // mock server
})

Таким образом, в процессе разработки мы используемaxios, вам нужно написать код только один раз в зависимости от разных сред

const service = axios.create({
  baseURL: process.env.NODE_ENV === 'production' ? process.env.BASE_API : '/api',
  ...
});

Для переключения с фиктивных данных на Dev Server API требуется только прокомментировать одну строку кода файла конфигурации без изменения исходного кода проекта. Очень дружелюбный.

А пока давайте посмотрим на фиктивный URL-адрес, сгенерированный easy-mock и rap2:

http://easy-mock.com/mock/5c08e554bd9f9c3a01c5abf6/api/info
=> host/mock/projectId/:path

http://rap2.taobao.org:8080/app/mock/45/GET/api/info 
=> host/app/mock/:repositoryId/:method/:path

ps: Позже выяснилось, что URL-адрес rap2 может быть без метода, но невозможно использовать restful API, который представляет собой интерфейс, дифференцированный по методу.

С точки зрения генерируемого URL, Rap2 там:methodпеременные, требуется больше усилий для плавного переключения. нельзя заменить напрямуюBASE_API. Если он будет вставлен в код, он будет очень навязчив к коду.

Поэтому подумайте об оптимизации на инженерном уровне:

в каталоге проектаconfigв каталогеindex.js, можно настроить прокси для единой обработки:methodПеременная. существуетproxyTableобъект добавленbypassЭтот метод для каждого интерфейса, который проходит через прокси-сервер, обрабатывает URL-адрес запроса в квалифицированный фиктивный URL-адрес rap2.

module.exports = {
  dev: {
    ...
    proxyTable: {
      '/api': {
        target: config.BASE_API.substring(1, config.BASE_API.length - 1),
        changeOrigin: true,
        pathRewrite: {
          '^/api': '/'
        },
        bypass: function (req, res, proxyOptions) {
          if (proxyOptions.target.indexOf('mock') !== -1) {
            const path = req.url.replace(proxyOptions.context, proxyOptions.context + '/' + req.method);
            // path => /api/GET/path
            req.url = path;
          }
        }
      }
    },

Это позволит вам использовать rap2 неинвазивно.

В заключение

С точки зрения непротиворечивости интерфейсных документов и неинвазивности кодирования, rap2 может и лучше, но ведь rap2 — молодой open source проект, и многие механизмы не совершенны. Я использую rap2 с начала прошлого года, и недавно я обновился до новой версии структуры таблиц базы данных и должен сделать корректировку отображения, что подходит для людей, которые любят метаться. Таким образом, преимущества стабильности easy-mock заслуживают внимания.

На мой взгляд, будущий Mock Server — это не просто мок, это должна быть комбинация написания интерфейса + автоматический мок, а также какие-то вспомогательные функции вроде проверки полей интерфейса.

Лично я очень оптимистично отношусь к rap2.В конце концов, рефакторинговый проект из rap1 имеет определенный опыт использования.Рефакторинг должен быть в состоянии производить более качественные проекты с открытым исходным кодом.

Еще раз спасибо за удобство, которое проекты с открытым исходным кодом приносят разработчикам.

Mock.js : mockjs.com/

easymock: easymock.org/

rap2 : rap2.taobao.org/