предисловие
Я давно не обновлял статью.Я только недавно запустил стек технологий React и несколько новых проектов компании.Некоторые из них не могут найти время.Некоторые проекты с открытым исходным кодом, в которых я участвовал, перестали обновляться, и статья снята с производства в течение длительного времени. , Моя статья предназначена для некоторых мелких партнеров, которые нуждаются в продвижении или продвигаются. Хотя моя статья не обязательно полезна, она может указать вам направление. Направление для размышлений.
Большинство идей в сообществе уже готовы к использованию. Я видел некоторые面试文章
Есть даже ошибки в содержании, а некоторые анализы полупоняты. Благодаря этому стеку технологий передачи (vue & react
) Я понимаю некоторые привычки, вызванные мягким знанием, такие как自我思考能力
,项目拆分能力
,驱动学习能力
и т.п.
Настоящее продвижение, в моем понимании, это сломать舒适圈
, ломайте барьеры, думайте и исследуйте неизвестное, когда вы медленно осваиваете неизвестное, продолжаете искать барьеры и продолжаете разрушать барьеры, тогда вы квалифицированный инженер.
Зачем писать API
Я верю в2020
Сегодня большинство фронтендов находятся в собственных проектах, разделив интерфейс как на самостоятельный модуль, так и вview
, вам нужно только сделать асинхронный вызов, чтобы захватить后台数据
а также异常信息
.
Преимущество разделения компонентов заключается в том, что нам легко управлять.Когда интерфейс настраивается в фоновом режиме, нам нужно только перейти к соответствующему модулю, чтобы изменить информацию о конфигурации, вместо того, чтобы сначала искать страницу, ища метод запроса интерфейса.
Я думаю, что информация о запросе не должна быть написана вместе в компоненте. QAQ
текст
Итак, позвольте мне рассказать вам об одномapi
Управление им является чисто личным резюме.Если у вас есть какие-либо предложения, вы можете оставить сообщение в области комментариев для обсуждения и обмена.
Основная идея
обратиться к约定式
форма, дляapi
Все файлы в каталоге имеют имена с**.api.js
файл, я по умолчаниюAPI的模块
,Например
- src
-- api
---- user.api.js
---- featrue.api.js
---- index.js
В данном случае это относительно хорошее состояние. Будь то новый разработчик или уже работающий разработчик, вы можетеapi
Ниже приведена каноническая схема. Затем, в конце концов, вам нужно только изменить соответствующий модульAPI接口
Канонический экспорт в порядке.
/// @api user.api.js
export default {
getUserAuth: 'GET /api/user/auth',
postUser: 'POST /api/user',
putUser: 'PUT /api/user/:id',
deleteUser: 'DELETE /api/user/:id',
}
производящая функция
наконец всеAPI规范式
будет сгенерирован как функция, подобная следующей
function request () {
return network({
// ...... axios参数
})
}
Как производить?
В канонической форме свойства производного объекта таковы:key
В конечном итоге будет проанализировано в функцию запросаkey
, и значение обрезается, и окончательное отображение становитсяurl
,method
. Пока сгенерирован базовый параметр конфигурации.На самом деле эта функция тоже очень проста.generateSyncRequestMethod
Основная цель метода — функционализировать обернутый модуль и сделать промежуточную модель.
const generateSyncRequestMethod = module => {
const result = {};
for (const key in module) {
const [method, url] = module[key].split(' ')
result[key] = (options = {}) => {
console.log('... 函数内部体系')
}
}
return result
}
RESTful канонический
дляRESTful
В случае использования соглашения должна быть коммуникация между интерфейсом и сервером.Это взаимодействие является фиксированным процессом.Для спецификации интерфейса, начиная сA项目
=>
B项目
С точки зрения этой спецификации интерфейса, этоTeam
Основная спецификация , как неподвижного состояния. Поэтому эту нормативную задачу нужно выполнять по форме команды, поэтому она только для справки. Делайте это в соответствии с нормами вашей команды.
использовать:GET /api/model/:id
, используя эту каноническую формулу, параметры, которые вы передаете в метод запроса, должны иметь определенные ограничения. Первый вoption
В атрибут нужно передать соответствующий объявленный в интерфейсе спецификации:值
В качестве ограничения оба должны быть равны.
Во-вторых, для параметров, как мы все знаем, есть примерно два распространенных метода запроса, один из нихdata
в виде , часто встречается вPOST
PUT
,а такжеGet
метод, этоparams
, поэтому сделана каноническая форма.Атрибуты параметров запроса динамически и гибко задаются разработчиком, а не архитектурой. Позвольте его гибкости иметь хороший комфорт, отпуская при этом немного гибкости.
request({ id: 1, data: {} })
for (const rest in options) {
if (url.includes(`:${rest}`)) {
url = url.replace(new RegExp(`:${rest}`), options[rest]);
delete options[rest];
console.log(url, options);
}
}
return network({
url,
method,
...options,
});
преимущество
- Согласованное руководство, разработчики не должны писать повторный код
- Гибкость, настройка параметров может быть выполнена с помощью бэкенда, параметры могут быть переданы во время разработки и синхронизированы с конфигурацией запроса.
- Синхронный макет для некоторых соглашений
Mock
интерфейс, та же конфигурация
недостаток
- Синтаксический анализ соглашений об интерфейсе требует потребления производительности.
- Создание интерфейсных функций, требующих потребления производительности.
- метод функции имеет ограничения
В конце концов, после того, как интерфейс будет доведен до совершенства в ранней производственной среде, он будет независимо упакован в
chunk
файл, кешированный
полный код
Время поджимает, поэтому TypeScript еще не написан, и я восполню это, когда у меня будет время в будущем.
// @api index.js
import network from '@/utils/network'
const PATH = './'
const ISDEEP = false
const REG = /.api.js$/
const MODE = ' sync'
const apiFiles = require.context(PATH, ISDEEP, REG, MODE)
const generateSyncRequestMethod = module => {
const result = {};
for (const key in module) {
const [method, url] = module[key].split(' ')
result[key] = (options = {}) => {
for (const rest in options) {
if (url.includes(`:${ rest }`)) {
url = url.replace(new RegExp(`:${ rest }`), options[rest])
delete options[rest]
} else {
continue
}
}
return network({
url,
method,
...options
})
}
}
return result
}
let apiResult = {}
apiFiles.keys().forEach(element => {
apiResult = {
...generateSyncRequestMethod(apiFiles(element).default)
}
})
export default apiResult
позже
Если есть хороший метод оптимизации, я могу обсудить его ниже, я также перечислил некоторые преимущества и недостатки, а также я думаю о некоторых более глубоких вещах, чтобы уменьшить внимание разработчиков к логике API за разумные деньги.api
справляться. Это тоже моя первая статья в сентябре.Я просто сменил работу и я тоже меняю стек технологий, и он будет выводиться медленно.React
Статьи по Теме.
Голубь слишком долго и есть некоторая вина. Медленно корректируйте состояние, цель следующего года - 6. Недавно я купил эту книгу по структуре данных, чтобы изучить и дополнить основы.