ZanApi делает координацию интерфейсов и серверов более эффективной

Java задняя часть внешний интерфейс API

1. Что мы имеем в виду, когда говорим о совместной работе перед интерфейсом и сервером?

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

Если взять в качестве примера цикл разработки проекта, сотрудничество обычно должно сталкиваться со следующими проблемами:

  1. На ранней стадии разработки проекта клиентской и серверной части необходимо согласовать определение интерфейса, и лучше всего сохранить его в одном месте и поддерживать по мере итеративного развития проекта.
  2. Когда фронтенд и бэкенд разрабатываются параллельно, фронтенд должен сначала имитировать данные интерфейса.
  3. Перед совместной отладкой проекта для фронтенд-студентов нам нужно иметь возможность научно судить, действительно ли интерфейс бэкэнд-студентов достиг состояния совместной отладки.

2. Что вы делали до того, как вам понравился

1. Для определения интерфейса

Я считаю, что многие компании, такие как Youzan, не имеют специального сайта с документацией по API или соответствующих инструментов, в основном инженеры вручную создают и поддерживают документацию по интерфейсу на общем сайте документации.

Youzan также использует этот метод для поддержки документов интерфейса, но этот метод принесет некоторые очевидные проблемы:

  1. Стоимость создания и обслуживания высока.Когда студенты, работающие на бэк-энде, заняты, может быть невозможно предоставить и обновить документы вовремя.
  2. Написание вручную чревато ошибками.
  3. Поскольку это сайт общей документации, отображение документации интерфейса не очень интуитивно понятно.

Эти проблемы увеличат стоимость связи для обеих сторон и повлияют на общий ход проекта.

2. Для имитации данных

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

Например, в начале вы можете использовать метод прямой записи фиктивных данных во внешнем коде. Возможно, вам знаком следующий код:

import mockData from './mockdata.js'

// ajax(url).then(dosomething)
// 数据 mock

setTimeout(mockData => {
    dosomething(mockData);
}, 1000);

Таким образом, фронтенд-студенты могут вручную имитировать данные внутреннего интерфейса на этапе разработки, чтобы добиться параллельной разработки.

Но недостатки этого подхода очевидны:

  1. setTimeout, очевидно, не может полностью имитировать поведение ajax.
  2. Код должен быть изменен и переупакован перед выходом в сеть.
  3. Из-за недостатка 2 будут введены дополнительные точки риска. (забыл изменить и переупаковать)
  4. Сохранять ли фиктивные данные и соответствующую логику для последующей итерации проекта.
  5. Если внутренний интерфейс изменяется, он не может ответить вовремя (в зависимости от уведомлений заголовка переднего и заднего порта)

Из-за этих недостатков и роста популярности nodejs студенты, работающие с интерфейсом, естественно, будут думать об использовании узла в качестве фиктивного сервера. Итак, есть такой способ:

// ajax(realUrl).then(dosomething)

ajax(mockUrl).then(dosomething)

Этот метод решает проблему использования setTimeout для симуляции реальных запросов и значительно уменьшает вмешательство mock-функции в бизнес. А поскольку фиктивные данные удалены, внешний и внутренний интерфейсы можно изменять одновременно, что снижает затраты на связь.

Но это все равно не решает проблему2,3,4.

Варианты этого подхода использовались с лайками, мы полагаемся на конкретныеajaxбиблиотекаглобальный хук, решил проблему2,3,4. Но это также приносит другие проблемы, такие какajaxСильные зависимости от библиотек.

3. Решение о совместном вводе в эксплуатацию

Я считаю, что многие компании похожи на Youzan.Время совместной отладки оценивается в начале проекта.Когда начинается совместная отладка, фронтенд не знает, действительно ли интерфейс бэкенда в порядке или, по крайней мере, может быть скорректированы. Так что часто встречающаяся проблема заключается в том, что после того, как бэкенд-одноклассники говорят вам, что вы можете сделать совместную отладку, вы обнаруживаете, что интерфейсные отчеты все404или500, последняя проверка заключается в том, что существует проблема с конфигурацией внутренней среды.

На самом деле лучшего решения Youzan раньше не находил, и можно лишь сказать, что оно все еще находится в стадии исследования.

3. Итак, какой метод сотрудничества нам нужен?

1. Для документации

  1. Back-end студенты могут быстро создавать документы и постоянно поддерживать их.
  2. Документация должна содержать достаточно информации
  3. Отображение определения дружественного интерфейса

2. Для имитации данных

  1. Обеим сторонам удобно вносить изменения одновременно с немедленным вступлением в силу.
  2. Лучше автоматически генерировать случайные возвращаемые значения
  3. Может возвращать разные данные в соответствии с разными параметрами запроса
  4. Изменение поведения фиктивных данных может быстро уведомить партнеров, чтобы избежать распознавания асинхронного формата данных.

3. Для лучшей оценки времени совместной отладки

Определите, можно ли назвать внутренний интерфейс более научным способом.

4. Как ZanApi это делает?

Во-первых, может ли стоимость написания документов для студентов бэкенда быть нулевой?

В настоящее время Youzan активно продвигает сервисизацию и представилаnodeв качестве промежуточного слоя. Итак, в «Вам нравится» передняя и задняя границы становятсяbrowser + node -> java 服务化接口.

Для студентов, изучающих Java, в отрасли есть несколько зрелых решений для создания интерфейсных документов, таких какswagger,api blueprint,swift.

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

И некоторые решения не подходят для текущего все более мейнстримногоbrowser & node -> 协议网关 -> java 服务化接口Это front-end и back-end сотрудничество.

1. Схема генерации документов ZanApi

方案

Решить проблему быстрого формирования и обновления документов

Чтобы облегчить изучающим Java создание документов, мы предоставляем студентам, изучающим Java,IDEA Intellij 插件.

Конечным результатом является то, что студенты, изучающие Java, могутОдин ключСоздание и обновление документации по интерфейсу.

plugin

Решение проблем с данными документа и отображение

Мы развернули удаленныйjava 解析服务器, с помощью этого сервиса синтаксического анализа мы можем преобразоватьjavaКомментарии в коде извлекаются для создания комментариев к полям интерфейса. Окончательное определение возвращаемого значения интерфейса может выглядеть следующим образом.

返回值示例

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

2. Решение для имитации данных ZanApi

В настоящее время существует полная схема макета данных, как показано на рисунке:

mock方案

Запрос от клиента (ПК/мобильный) проходитZanProxyПосле фильтрации введите интерфейс, который необходимо смоделировать.ZanApiна, черезZanApiВернуть фиктивные данные.

Решите проблему, которую можно изменить одновременно, быстрое уведомление

Так как ZanApi развертывается на удаленном конце, передняя и задняя часть могут быть изменены одновременно, поэтому, естественно, такой проблемы не возникает.

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

变更通知

Поддержка нескольких фиктивных данных, автоматическое сопоставление

ZanApi поддерживает добавление нескольких фиктивных данных в один и тот же интерфейс.При запросе фиктивных данных ZanApi может автоматически возвращать разные фиктивные данные через параметры запроса.

Поддержка возврата случайных данных в соответствии с определением интерфейса

Когда одноклассники Java проходятIdea 插件Когда документ интерфейса создается автоматически, ZanApi получит определение возвращаемого значения интерфейса через службу синтаксического анализа и автоматически преобразует определение вJSONSchemaФормат.

Когда необходимо вернуть случайные данные, ZanApi может вернуть значение в соответствии с интерфейсом.JSONSchemaОпределение генерирует случайные числа и возвращает их клиенту.

3. Поддержка ZanApi для совместной отладки

В ZanApi вы можете создавать разные контексты для каждого интерфейса.测试用例. существует测试用例На основе измерения проекта можно создать接口集合.

когда接口集合После создания ZanApi предоставляетТест в один кликФункции.

Тест в один кликфункция получит接口集合во всех интерфейсах и поместите те интерфейсы, которые определены в测试用例Запустите его полностью. Если один из интерфейсов не может быть настроен, ZanApi сообщит вам, что проверка интерфейса не удалась.

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

Например, в определении возвращаемого значения интерфейса полеcountявляется числом, но ZanApi обнаружил, что поле в реальных данных, возвращаемых тестовым набором, представляет собойstring, то тестовый пример также не пройдет.

Пользовательский интерфейс выглядит следующим образом:

接口集合测试

5. Наконец

существуетДень открытых дверей Youzan TechnologyПосле того, как я представил ZanApi, я обнаружил, что все по-прежнему очень заинтересованы в ZanApi. Но поскольку у нас не было времени разобраться с вопросами, связанными с открытым исходным кодом, и действительно ZanApi все еще остается незрелым, открытый исходный код ZanApi не должен быть возможен в краткосрочной перспективе.

Но у нас всегда были планы на открытый исходный код, и мы работаем над этим.