Дар гузашта, ман бисёр вақт як равиши умумиро мушоҳида мекардам, ки таҳиягарон (аз ҷумла худам, албатта) як API-ро барои хондан ва навиштан дар ҳар як ҳолат истифода мебурданд. Ғайр аз он, мо барои идора кардани ҳарду амалиёт аксар вақт ба як манбаи додаҳо, ба монанди MySQL/PostgreSQL такя мекардем.
Ин маънои навиштан ба ҳамон сутунҳо ва аз онҳо хонданро дорад, ки аксар вақт ба мубориза бо оптимизатсияи индексҳо дар майдонҳое, ки пурсишҳои зиёд доранд, оварда мерасонад.
Ҳамин тавр, масалан, мо мехоҳем зуд-зуд шохисҳоро тағир диҳем, то филтрҳои нав ё беҳтар кардани иҷрои дархостҳо ва майдонҳое, ки бо операторҳо истифода мешаванд, ба монанди LIKE аз сабаби таъсири онҳо ба иҷроиш, мушкилоти хосеро ба бор меоварданд.
Ин тағиротҳо аксар вақт ба ислоҳоти минбаъдаи пуштибонӣ оварда мерасонанд, аз ҷумла тағир додани API-ҳо барои фош кардани функсияҳои навшуда, вақти ченшуда аз ҳисоби JOIN-ҳои иловагӣ ва ғайра...
Барои ҳалли мушкилот дар бораи илова кардани филтрҳо ва ашёи нав дар API, кӯшишҳо барои оптимизатсия кардани раванд бо истифода аз асбобҳо ва стандартҳо ба монанди Apicalypse ва албатта GraphQL буданд.
Ин қарорҳо ба содда кардани тавлиди дархостҳои API ва кам кардани кӯшиши дастӣ барои татбиқи филтрҳо ва функсияҳои нав нигаронида шудаанд, ки барои коркарди дастрасии додаҳо равиши бештар динамикӣ пешниҳод мекунанд, аммо онҳо хатти баланди омӯзиш доштанд.
Бо афзоиши CQRS (Segregation Query Responsibility Command), равиши нав пайдо шуд. Ин тафаккур ба истифодаи манбаъҳои алоҳида барои навиштан ва хондан ташвиқ мекард. Навиштаҳо метавонанд рӯйдодҳоро паҳн кунанд ва хонданҳо метавонанд аз ин рӯйдодҳо дар ҷойҳои махсус назари худро эҷод кунанд. Ҳатто агар хондан ва навиштан дар як пойгоҳи додаҳо идора карда мешуд (вале ҷадвалҳои гуногун), ин ҷудокунӣ манфиатҳои назаррас овард ва, албатта, тавонист аз мушкилоти дуюм - JOINҳо ва дархостҳои ҷустуҷӯӣ дар моделҳои доменҳо халос шавад, зеро моделҳои хондан одатан дар шакли JSON-ҳои ғайримуқаррарӣ.
Аммо ин як мушкили дигарро ба миён овард. Ҳангоми хондан, мо маҷбур шудем, ки навиштанҳоро миқёс кунем, маънои ягона сабаби миқёси миқёси дархости мо аз X то Y ин хондан буд. Ин масъаларо метавон бо кэш қисман ҳал кард ва дар ҷаҳони хидматрасониҳои хурд, мо метавонистем микросервисҳои махсус барои хондан дошта бошем.
Аммо...
Бо вуҷуди ин, ин як ҳалли беҳтарин барои дигар услубҳои меъморӣ ба монанди монолитҳои модулӣ набуд, ки дар он ҷо чунин ҷудокунӣ бо фалсафаи тарроҳии система мувофиқат намекунад. Чизи дигар ин буд, ки вақте ки API қатъ шуд, тамоми маҳсулот хомӯш буд ва дар хотир дошта бошед, ки аксари маҳсулот нисбат ба навиштан ба хондани бештар такя мекунанд, он метавонад ба тиҷорат таъсири нолозимро расонад (албатта аз поёни API;) )
Пас, чӣ мешавад, агар мо метавонем аз он "назардоштҳо", ки ҳамчун моделҳои хондан маълуманд, мустақиман бидуни ҷалби API ва коркарди борҳо пурсем? Дар ин ҷо қарорҳо ба монанди Meilisearch , AppSearch ва дигарон ба кор медароянд, ки намунаи "Valet Key"-ро истифода мебаранд. Бо истифода аз ин намуна, фронтҳо метавонанд мустақиман ба моделҳои барои хондан оптимизатсияшуда дастрасӣ пайдо кунанд ва вобастагии API-ҳои пуштибониро коҳиш диҳанд. Албатта, интерфейс то ҳол бояд API-ро барои "калиди Valet" "пурсад", аммо интерфейс метавонад калидҳоро кэш кунад, аз ин рӯ, ҳатто вақте ки API кор намекунад, интерфейс метавонад мундариҷаро нишон диҳад.
Бо ин равиш, мо метавонем ба пойгоҳи додаҳои хониш тамаркуз кунем ва дар бораи коркарди трафик барои хондан дар API-и худ хавотир нашавем. "Калиди Valet", ки ба интерфейс тавассути API-и мо дода шудааст, тавре ҳифз шудааст, ки интерфейс онро тағир дода наметавонад. Он филтрҳо ва индексҳои пешакӣ муайяншударо дар бар мегирад.
Агар интерфейс имкониятҳои иловагиро талаб кунад, он метавонад онҳоро тавассути API дархост кунад, ки дар он API метавонад тасдиқ кунад, ки оё ба онҳо иҷозат дода мешавад. Зангҳо ҳанӯз камтар аст.
Баъзе аз тарафдорони ман дида метавонам инҳоянд:
Аммо, ҳамеша камбудиҳо вуҷуд доранд:
Ҳамин тавр, ин равиш як тири нуқра нест ва маҷмӯи мушкилоти худро муаррифӣ мекунад, аммо агар шумо бо манфии худ хуб бошед, пас тағироти хурд дар фронт эҳтимол ҷалби дастаи пуштибон, ба тартиб даровардани раванди рушд ва такмил додани технологияро талаб намекунад. чолокии умумӣ ва албатта миқёспазирӣ бояд осонтар бошад.