Галоўная / Артыкулы

Express API-і з абсалютной безпекай прыменню Zod і OpenAPI ў адным кантракце

Адзін кантракт для Express API захісту тыпаў: Zod перавершае запіты на входзе, а тыя ж схемы генеруюць OpenAPI, таму тыпы і документацыя TypeScript ніколі не змінююцца.

Выдавец: REACTAPP.TOP3 хв чытання746 слоў

Крыніцы: Building a Type-Safe Express API with Zod and OpenAPI

У гэтым керавані практычна адгуктва ствараецца рабочы маршрут для: стварэння Type-Safe Express API з Zod і OpenAPI. Акцэнт ставіцца на кантракты, пераконтроўкі і код, які можна прынясіць у рэпазітарый без неабязковасці з’ясоўваць намеры. Для загальнага адгледжэння, перш чым зменяць код, неабходна візначыць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння. Аперацыі должны магчымае пераўталачваць крок з вядомай точкі контролю без неабязковасці з’ясоўваць схованы стан. Валідзіце маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшоў, прычына неудачы должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны працэс.

Ідэя

Для рэалізацыі гэйтары неабяжна прадзефінаваць вхідныя даны, адпраўніка крока і крытэрыя завершэння пры змены коду. Аперацыйныя працавнікі должны магчымае перайсці на выкананне крока з вядомага пункта контролю, не прымуджаючыся з’ясавіць захаваны стан. Спрыятлівае ставленне да гэтага этапу павінна выглядаць як кантракт межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Назваць всі неабяжныя элементы, прадзефінаваць крытэрыя успеху і не падтрымляць тых варыянтаў, калі задача выканана часткова без паведамлення. Практыкуваць перакананне на межах сістэмы за дапамою шэмаў, якія таксама генеруюць документацыю. Адна аднозначная правда крашчая, чым расхілы межа OpenAPI і працоўнікамі апрацоўкі дадзеных.

const CreateUserSchema = z.object({
  name: z.string(),
  email: z.string().email(),
});

api.post("/users", {
  body: CreateUserSchema,
  response: {
    201: UserSchema,
  },
  handler: async (req) => {
    const user = await createUser(req.body);
    return {
      status: 201,
      body: user,
    };
  },
});

Чаму ствараць ўтолькі іншую бібліятэку Express?

Для падзеўкі «Чаму ствараць ўтолькі іншых бібліятэкаў Express?» неабходна пазначыць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння пры перадзмене коду. Аперацыйныя працавнікі должны магчымае перзапускаць крок з вядомай точкі контролю, не прабуючы спадарацца пра схованы стан. Запісваюцься час выканання і вітраты разам з функцыйнальнымі рэзултатамі. Раннія відкрытасць усіх параметраў запобегае неспакойным рахункам, калі працэс пераходзіць з дэмаверсіі ў спяльныя сераўы. Автаперакананне на межы ведзецца за дапамогою схем, якія таксама генеруюць документацыю. Адна аднозначная правда крашчая, чым расхіл межа OpenAPI і працоўнікаў.

Якое ўжо становішча сёньня

Для праекта «Where it is today» неабяжна прадзефінавацыя вхідных дадзеных, адпраўніка крока і крэтарыяў завершэння працы перад зменым коду. Аперацыйныя працавнікі павінны магчымаецца перзапускаць крок з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Конфігурацыю трэба захаваць праза код аплікацыі. Файлы сераўнавання, хранальнікі секрэтных дадзеных і флагі функцыйяў павінны знаходзіцца ў адном месцы, якое аперацыйныя працавнікі могу пераглядаць, не чытаючы весь ланцуг аператаў. Прабавайце пераканаць даныя на межы за дапамойю схем, якія таксама генеруюць документацыю. Адна аднозначная правда крашчая, чым расхіл межа OpenAPI і працоўнікаў апрацоўкі. Для праекта «Where it is today» неабяжна прадзефінавацыя вхідных дадзеных, адпраўніка крока і крэтарыяў завершэння працы перад зменым коду. Аперацыйныя працавнікі павінны магчымаецца перзапускаць крок з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Валідуйце маленькія, тэставальныя елементы замест большых скрыптов. Калі крок не выйшоў, прычына неудачы павінна вказываць на адную адпраўнічую функцыю, а не на заплутаны ланцуг аператаў.

Вам будзе корысныя адказы распрацоўшчыкаў

Калі вам будзе корысныя адказы распрацоўшчыкаў, перад змінай коду неабходна візначыць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння. Аператары должны магчымае перайсці заўтра крок з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Спрыяйце цім этапу як кантракту межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Дайце назвы артыфактам, візначыце крытэрыя успеху і адмовіцеся ад безсловеснага частковага завершэння. Вяртайце структураваныя паказчыкі аб будзь-яых кашточках, якія кліенты можаць выкарыстоўваць для далейшых дзеянняў. Строгая працэса тыпавання выклікае неабходнасць здагадвацца.

Чэк-ліст для эксплуатацыі

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

Запісвайце адно часова шлях і шлях вярнення ў нормальны стан. Практыкі павторных спроб, людзкія контралеры і обработка некорэктных паведамленняў ёсць часткай продукту, а не чымсь, што дадаецца пазней.

Вяртайце структураваныя адказы пра аберанні, на якія можаць спрыяць кліент. Недастатак строгай пераканальнай верыфікацыі вымушвае працаваць на здогадкі.

Волейце простую надзяйнасць за розумныя, ексклюзыўныя дэманстраціі.

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

Вяртайце структураваныя адказы пра аберанні, на якія можаць спрыяць кліент. Недастатак строгай пераканальнай верыфікацыі вымушвае працаваць на здогадкі.

Перш чым пераводзіць стэк у наступны ўровень, заморозьце версіі, зафіксавайце ідэальны транскрыпт для крытычнага шляху і паказвайце крокі для вярнення да пачатковага стану. У спільных срэдах неабходны ліміты частоты запытоў, пераканальнія перагляды тэнансаў і чысткі власнік для ротацыі секрэтных даных. Волейце простую надзяйнасць за розумныя, ексклюзыўныя дэманстраціі.