предисловие
Многие компании сейчас делают акцент на разделении front-end и back-end разработки. Возможна проблема. Back-end интерфейс еще не написан. Наши 🐂🐂 front-end студенты уже написали front-end, ждем отладку интерфейса. Для решения этой проблемы я написал мок-платформу интерфейсного интерфейса, сроки разработки проекта невелики, а идеи недостаточно ясны.
Адрес онлайн-опыта:Платформа макета интерфейса
Адрес источника:исходный код git
идеи
Запрос интерфейса содержит строку запроса, заголовок запроса и содержимое запроса. Затем мы можем разобрать запрос через узел, а затем сопоставить содержимое этого интерфейса и вернуть данные, соответствующие условиям запроса интерфейса, как фейкер. Данные, которые возвращает реальный интерфейс, подделываются, чтобы добиться того же эффекта, что и реальный интерфейс.
выполнить
Реализованные функции:
1. 登录注册
2. 增删项目工程
3. 增删接口
4. 接口mock
Стек технологий: nextjs + koa + sqlite + sequenceize
Общий проект не сложен, и для студентов, которые хотят изучить вышеуказанные методы, также может быть предоставлена демонстрация.
Общая структура проекта
Проект основан на рендеринге на стороне сервера и имеет две страницы: домашнюю страницу и страницу сведений о проекте. Я поместил службу интерфейса из узла и службу из серверной среды рендеринга nexjs на один и тот же порт. Его также можно отделить, основная причина здесь в том, что мы не хотим запускать еще один сервис.
База данных использует sqlite3, ее преимущества встроены, нулевая настройка, сверхлегкий вес, данные хранятся в виде файлов, дополнительная настройка базы данных не требуется. Прямо скажем, удобно и, конечно, очень полезно.
Соединение с базой данных продолжается через инфраструктуру ORM: (объектно-реляционное сопоставление) Платформа использует метаданные для описания деталей объектно-реляционного сопоставления. Это хорошо. Это благо для студентов, которые не знают многого. о языке SQL После написания оператора SQL вам нужно только управлять базой данных, как js работает с объектом.
Схема маршрутизации также очень проста и в основном разделена на три маршрута:
- Маршруты, которые обрабатывают рендеринг страницы на стороне сервера,
- Маршруты, обрабатывающие запросы страниц,
- Обрабатывает маршрутизацию макетов интерфейса.
//next页面api接口
router.post('/api/:page', async ctx => {
await routePost({ params: ctx.params.page, query: ctx.request.body }).then((res, err) => {
response(res, err, ctx)
})
})
router.get('/api/:page', async ctx => {
await routeGet({ params: ctx.params.page, query: ctx.request.query }).then((res, err) => {
response(res, err, ctx)
})
})
router.delete('/api/:page', async ctx => {
await routeDelete({ params: ctx.params.page, query: ctx.request.body }).then((res, err) => {
response(res, err, ctx)
})
})
//mock数据接口
router.all('/mock/:project_id/*', async ctx => {
const { method, body, url, header } = ctx.request
await routeMock({ params: ctx.params, body, method, url, header }).then((res, err) => {
response(res, err, ctx)
})
})
//next页面接口
app.prepare()
.then(() => {
// 首页
router.get('/', async ctx => {
await app.render(ctx.req, ctx.res, '/', ctx.query)
ctx.respond = false
})
// 项目
router.get('/project', async ctx => {
await app.render(ctx.req, ctx.res, `/project`, ctx.query)
ctx.respond = false
})
// 如果没有配置nginx做静态文件服务,下面代码请务必开启
router.get('*', async ctx => {
await handle(ctx.req, ctx.res)
ctx.respond = false
})
// 防止出现控制台报404错误
server.use(async (ctx, next) => {
ctx.res.statusCode = 200
await next()
})
server.use(router.routes()).use(router.allowedMethods())
server.listen(port, () => {
console.log(`> Ready on http://localhost:${port}`)
})
})
Используйте url как различие: api — это запрос страницы, mock — запрос имитации интерфейса, а другой — запрос рендеринга следующей страницы. Различная обработка выполняется путем оценки URL-адреса запроса:
routeDelete: async ({ params, query }) => {
const { id } = query
switch (params) {
case 'project':
await api.deleteApi(id) //删除项目的同时清空对应的api接口
return await project.deleteOne(id).then(res => response(0, res)).catch(error => response(1, error.message))
case 'interface':
return await api.deleteOneApi(id).then(res => response(0, res)).catch(error => response(1, error.message))
default:
return '接口请求出错'
}
},
Как и в предыдущем случае, пожалуйста, обратитесь к исходному коду для получения подробной информации.
Общий процесс проекта
Новый проект (project_id)
->
Новый интерфейс (url, метод, заголовки, тело, данные)
->
Доменное имя локального прокси-интерфейса проекта
->
Сделать запрос к созданному интерфейсу (http://host/mock/project_id/xxxxxx)
->
koa анализирует запрос для получения параметров (url, метод, тело, заголовки)
->
Определите, соответствует ли параметр запроса соответствующему интерфейсу путем маршрутизации
->
По project_id переходим в таблицу данных интерфейса, чтобы найти соответствующие данные и вернуть их в локальный проект
Использование проекта
В настоящее время макет интерфейса проекта поддерживает только возврат данных json.В будущем я хотел бы добавить другие форматы данных, такие как возвращаемые массивы и логические значения.
использовать:
- в состоянии пройтионлайн-адресСоздайте свой собственный проект, настройте интерфейс и проверьте, можно ли использовать интерфейс через postman.
- Можно клонироватьисходный кодЛокальный запуск службы также можно протестировать с помощью почтальона или других инструментов, просто измените доменное имя службы на локальное.
позже
Этот проект является личным проектом с полностью открытым исходным кодом, а также для решения актуальных проблем разработки.
Проект только стартовал и еще не запущен в реальную эксплуатацию, должно быть много проблем и необоснованных мест. Если у вас есть какие-либо вопросы, пожалуйста, оставьте сообщение.
Если вам интересно, вы можете найти мой здесьКонтакты, участвовать вместе, чтобы продолжить этот проект.