paint-brush
Ҷадвал ҳамчун API? Иллюзияҳо ва воқеиятаз ҷониби@truewebber
Таърихи нав

Ҷадвал ҳамчун API? Иллюзияҳо ва воқеият

аз ҷониби Aleksei Kish9m2025/03/05
Read on Terminal Reader

Хеле дароз; Хондан

Муаллиф тасдиқ мекунад, ки истифодаи ҷадвали муштараки пойгоҳи додаҳо ҳамчун воситаи алоқаи хидмат ба хидмат як намунаи зиддитеррористӣ мебошад. Гарчанде ки он як роҳи ҳалли зуд ба назар мерасад, он боиси сар задани сар, моликияти номуайян ва мушкилот бо миқёспазирӣ ва амният мегардад. Ба ҷои ин, мақола равиши "Аввал шартнома" -ро ҷонибдорӣ мекунад, ки дар он ҳар як хидмат расман интерфейсҳои худро муайян мекунад ва моликияти маълумоти худро нигоҳ медорад. Ин усул масъулияти дақиқтар, таҳаввулоти ҳамвор ва ҳамгироии мустаҳкамтарро дар байни дастаҳо мусоидат мекунад.
featured image - Ҷадвал ҳамчун API? Иллюзияҳо ва воқеият
Aleksei Kish HackerNoon profile picture
0-item
1-item

Муқаддима

«Шартнома» дар заминаи ҳамкории хидматрасонӣ чист?

Дар заминаи модулҳои хидматрасонии мутақобила саволи ногузир ба миён меояд: Муошират бо кадом қоидаҳо сурат мегирад? Дар маҳсулоти IT, "қарордод" фаҳмиши расмии ҷараёни интиқоли маълумот дар байни системаҳо ва чӣ гуна интиқоли онро ифода мекунад. Ин формати додаҳо (JSON, Protobuf ва ғайра), унсурҳои сохторӣ (майдонҳо, намудҳои додаҳо), протоколи иртиботӣ (REST, gRPC, навбатҳои паёмҳо) ва мушаххасоти дигарро дар бар мегирад.


Шартнома ошкорбаёнӣ (ҳама медонад, ки чӣ қабул ва фиристода мешавад), пешгӯишаванда (мо метавонем шартномаро навсозӣ кунем ва версияҳоро нигоҳ дорем) ва эътимоднокӣ (агар мо тағироти хуб идора карда шавад, системаи мо ноком нахоҳад шуд) кафолат медиҳад.

Чаро одамон одатан ҷадвалро дар пойгоҳи додаҳо ҳамчун "шартнома" интихоб мекунанд.

Дар амал, гарчанде ки ҳама дар бораи хидматҳои хурд, "шартномаҳо" ва APIҳо сӯҳбат мекунанд, мо аксар вақт мебинем, ки одамон чунин равишро қабул мекунанд: "Чаро дар пойгоҳи додаҳо ба ҷои сохтани APIҳо ҷадвали муштарак эҷод накунед?"


  • Одати таърихӣ ё ташкилӣ: Вақте ки ҳама чиз ҳамеша дар як системаи DB дар як ширкат нигоҳ дошта мешуд, чаро чархро аз нав ихтироъ кардан лозим аст?


  • Тафаккури "таслеҳи зуд": Мо менависем, шумо бидуни муқаррар кардани қоидаҳои иҷозат ва тарҳрезии мушаххасоти API хонед.


  • Далели "маълумоти калон": Ҳангоми кор бо даҳҳо ва ҳатто садҳо гигабайт маълумот, интиқоли мустақим ба ҷадвали муштарак соддатар, тезтар ва сарфакоронатар ба назар мерасад, аммо дар амал он мушкилоти миқёспазирӣ ва иҷроиш, инчунин мушкилоти моликияти додаҳоро ба вуҷуд меорад.


Аз ин рӯ, ҳангоми истифодаи ҷадвали муштарак барои табодули маълумот метавонад барои натиҷаҳои зуд муассир ва оптимизатсияшуда ба назар расад, он дар дарозмуддат мушкилоти гуногуни техникӣ ва ташкилиро ба вуҷуд меорад. Аммо, вақте ки дастаҳо ҷадвалҳои муштаракро барои табодули маълумот интихоб мекунанд, онҳо метавонанд ҳангоми татбиқ бо мушкилоти зиёд рӯ ба рӯ шаванд.

Чаро "Ҷадвал дар пойгоҳи додаҳо" шартнома нест (ва чаро он як намунаи зидди намуна аст).

Набудани интерфейси дақиқ муайяншуда

Вақте ки хидматҳо тавассути REST/gRPC/GraphQL муошират мекунанд, онҳо таърифи расмӣ доранд: OpenAPI (Swagger), схемаҳои протобуф ё схемаҳои GraphQL. Инҳо ба таври муфассал муайян мекунанд, ки кадом захираҳо (нуқтаҳои ниҳоӣ) дастрасанд, кадом майдонҳо интизоранд, намудҳои онҳо ва форматҳои дархост/ҷавоб. Вақте ки "мизи муштарак" ҳамчун шартнома амал мекунад, тавсифи расмӣ вуҷуд надорад: Тавсифи расмии шартнома вуҷуд надорад; танҳо схемаи ҷадвал (DDL) дастрас аст ва ҳатто он хуб ҳуҷҷатгузорӣ нашудааст. Ҳама гуна тағироти ночизи сохтори ҷадвал (масалан, илова кардан ё нест кардани сутун, тағир додани намуди маълумот) метавонад ба дастаҳои дигаре, ки аз ин ҷадвал мехонанд ё ба он менависанд, таъсир расонад.

Проблемаҳои версия ва эволютсия

Навсозии API як таҷрибаи муқаррарӣ аст: Мо шояд v1, v2 ва ғайра дошта бошем ва мо метавонем мутобиқати ақибро нигоҳ дорем ва сипас тадриҷан муштариёнро ба версияҳои навтар интиқол диҳем. Барои ҷадвалҳои пойгоҳи додаҳо, мо танҳо амалиёти DDL дорем (масалан, ALTER TABLE ), ки бо муҳаррики мушаххаси DB зич пайваст шудаанд ва коркарди эҳтиёткоронаи муҳоҷиратро талаб мекунанд.


Ягон системаи мутамарказе вуҷуд надорад, ки метавонад ба истеъмолкунандагон дар бораи тағироти схема огоҳӣ фиристад, ки аз онҳо навсозии дархостҳои худро талаб кунад. Дар натиҷа, аҳдҳои "дар зери миз" метавонанд ба вуқӯъ оянд: касе метавонад дар чат навишт, "Фардо мо сутуни X ба Y иваз мекунем", аммо ҳеҷ кафолате нест, ки ҳама сари вақт омода хоҳанд шуд.

Моликияти равшан нест

Вақте ки API-и аниқ муайяншуда вуҷуд дорад, маълум мешавад, ки он кӣ дорад: хидмате, ки ҳамчун ношири API хидмат мекунад. Вақте ки дастаҳои сершумор як ҷадвали пойгоҳи додаҳоро истифода мебаранд, дар бораи кӣ сохторро муайян мекунад ва кадом майдонҳоро нигоҳ доштан ва чӣ гуна тафсири онҳоро муайян мекунад, нофаҳмиҳо вуҷуд дорад. Дар натиҷа, ҷадвал метавонад "моли касе" шавад ва ҳар як тағирот ба ҷустуҷӯ табдил меёбад: "Мо бояд бо он дастаи дигар тафтиш кунем, агар онҳо сутуни кӯҳнаро истифода баранд!"

Масъалаҳои амният ва назорати дастрасӣ

Агар бисёр дастаҳо ба МД дастрасӣ дошта бошанд, пайгирӣ кардани он душвор аст, ки кӣ дар ҷадвал хонда ва навишта метавонад. Имконияти он вуҷуд дорад, ки хидматҳои беиҷозат метавонанд ба маълумот дастрасӣ дошта бошанд, гарчанде ки он барои онҳо пешбинӣ нашуда буд. Идоракунии чунин масъалаҳо бо API осонтар аст: Шумо метавонед ҳуқуқҳои дастрасиро назорат кунед (кӣ метавонад ба кадом усулҳо занг занад), аутентификатсия ва авторизатсияро истифода баред ва назорат кунед, ки кӣ ба чӣ занг зад. Бо ҷадвал, он хеле мураккабтар аст.

Вобаста ба сохтори дохилӣ

Ҳама гуна тағйироти дохилӣ ба додаҳо (азнавташкилдиҳии индексҳо, тақсим кардани ҷадвал, тағир додани МБ) як мушкилоти глобалӣ мешаванд. Агар ҷадвал ҳамчун интерфейси ҷамъиятӣ кор кунад, соҳиб наметавонад тағироти дохилиро бидуни хатар ба ҳама хонандагон ва нависандагони беруна ворид кунад.

Нуқтаҳои дард ва мушкилоти маъмулӣ дар амал

Ҳамоҳангсозии тағйирот

Ин ҷанбаи аз ҳама дардовар аст: Чӣ тавр кас ба дастаи дигар хабар медиҳад, ки схема рӯзи дигар тағир меёбад?

  • Сенарияи муваффақ барои навсозии версияи ҷадвал: Соҳиб дар баробари схемаи кӯҳна ҷадвали навро бо схемаи навшуда эҷод мекунад. Варианти кӯҳна барои истеъмолкунандагони ҷорӣ дастрас боқӣ мемонад ва соҳиби он ба онҳо паёме мефиристад, ки мегӯяд: “Сохтори нав дастрас аст; ҳуҷҷатҳо ва мӯҳлатҳоро тафтиш кунед. Лутфан ҳангоми мавҷудияти ҳарду версия муҳоҷир кунед."


  • Аммо, дар сенарияи OLAP ё бо ҳаҷми калони додаҳо нигоҳ доштани ду ҷадвали мувозӣ кори ночиз нест. Шумо инчунин бояд муайян кунед, ки чӣ гуна маълумотро аз схемаи кӯҳна ба схемаи нав интиқол диҳед. Ин баъзан метавонад бекористии ба нақша гирифташуда ё инфрасохтори хеле мураккабро талаб кунад. Ин раванд ҳатман ҳам хатар ва ҳам кори иловагиро ба вуҷуд меорад.

Проблемаҳои якпорчагии маълумот

Вақте ки дастаҳои сершумор ҷадвали муштаракро барои интихоб ва навсозии маълумоти муҳим истифода мебаранд, он метавонад ба осонӣ ба "майдони ҷанг" табдил ёбад. Натиҷа ин аст, ки мантиқи тиҷорат дар хидматҳои гуногун пароканда мешавад ва назорати мутамаркази тамомияти додаҳо вуҷуд надорад. Донистани он, ки чаро як майдони мушаххас ба таври мушаххас нигоҳ дошта мешавад, кӣ метавонад онро навсозӣ кунад ва агар холӣ монад, чӣ мешавад, хеле душвор мешавад.

Мушкилоти ислоҳ ва мониторинг

Масалан, фарз мекунем, ки ҷадвал шикаста шуд: Фарз мекунем, ки маълумоти бад вуҷуд дорад ё касе дар баъзе сатрҳои муҳим қуфл гирифтааст. Муайян кардани сарчашмаи мушкилот метавонад аксар вақт талаб кунад, ки ҳар як дастаи дорои дастрасии DB барои муайян кардани кадом дархост боиси мушкилот шудааст. Ин аксар вақт маълум нест: Ин маънои онро дорад, ки дархости як даста метавонад пойгоҳи додаҳоро баста бошад, дар ҳоле ки дархости дастаи дигар хатои мушоҳидашавандаро ба вуҷуд меорад.

Нокомии як гиреҳ ҳамаро ба поён мекашад.

Махзани маълумоти муштарак як нуқтаи ноком аст. Агар он паст шавад, пас бисёр хидматҳо бо он фурӯ хоҳанд рафт. Вақте ки пойгоҳи додаҳо бо сабаби пурсишҳои вазнини як хадамот бо иҷроиш мушкилӣ доранд, ҳама хидматҳо бо мушкилот дучор мешаванд. Дар модели дорои API-ҳои возеҳ ва моликияти додаҳо, ҳар як даста устоди дастрасӣ ва иҷрои хидмати худ аст, бинобар ин нокомӣ дар як ҷузъ ба дигарон паҳн намешавад.

Таъмини нусхаи алоҳида барои хондан мушкилотро ҳал намекунад.

Як созиши умумӣ ин аст: "Мо ба шумо як нусхаи танҳо барои хондан медиҳем, то шумо бидуни таъсир ба пойгоҳи асосии мо пурсед." Дар аввал, ин метавонад баъзе мушкилоти боркуниро ҳал кунад, аммо:

  • Масъалаҳои версия боқӣ мемонанд. Мушкилоти асосӣ дар он аст, ки ҳангоми тағир додани сохтори ҷадвали асосӣ, сохтори реплика низ бо каме таъхир тағйир меёбад.


  • Қафомонии такрорӣ метавонад ҳолати маълумотро пешгӯинашаванда гардонад, хусусан бо маҷмӯи додаҳои калон.


  • Моликият то ҳол норавшан аст: формат, сохтор ва қоидаҳои истифодаро кӣ муайян мекунад? Реплика то ҳол "пора"-и махзани каси дигар аст.

Чӣ тавр дуруст тарҳрезии ҳамкории хидматрасонӣ (аввал шартнома)

Таърифи возеҳ шартнома.

Таҷрибаҳои муосири тарроҳӣ (масалан, "API Аввал" ё "Аввал шартнома") бо таърифи расмии интерфейс оғоз мешаванд. Схемаҳои OpenAPI/Swagger, protobuf ё GraphQL истифода мешаванд. Ҳамин тариқ, ҳам одамон ва ҳам мошинҳо медонанд, ки кадом нуқтаҳо дастрасанд, кадом майдонҳо талаб карда мешаванд ва кадом намуди маълумот истифода мешаванд.

Хизмат ҳамчун соҳиби маълумот

Дар меъмории микросервисҳо (ё ҳатто модулӣ), фарзия ин аст, ки ҳар як хидмат маълумоти худро пурра дорад. Он сохтор, нигоҳдорӣ ва мантиқи тиҷоратиро муайян мекунад ва API-ро барои ҳама дастрасии беруна ба ин API таъмин мекунад. Ҳеҷ кас наметавонад ба махзани "каси дигар" даст расонад: танҳо ба нуқтаи ниҳоӣ ё рӯйдодҳои расмӣ. Ин ҳаётро осонтар мекунад, вақте ки тағирот дар назар аст ва ҳамеша маълум аст, ки кӣ гунаҳкор аст.

Намунаҳои татбиқ

  • REST/HTTP: Хидмат нуқтаҳои ниҳоӣ ба монанди GET /items , POST /items ва ғайраро нашр мекунад ва муштариён бо схемаи дақиқи додаҳо (DTO) дархост пешниҳод мекунанд.


  • Протоколҳои gRPC / дуӣ: Дар gRPC/protobuf, хадамот ва паёмҳо дар файлҳои .proto расман муайян карда мешаванд ва танҳо ба файлҳои .proto тағирот ворид карда мешаванд, ки дар он усул, дархост ва посух муайян карда мешаванд.


  • Ба рӯйдодҳо асосёфта: Хидмати соҳиби маълумот рӯйдодҳоро ба брокере ба монанди Кафка ё RabbitMQ нашр мекунад ва муштариён онҳоро истеъмол мекунанд. Шартнома дар ин ҷо формати чорабинӣ мебошад. Тағироти сохторӣ тавассути мавзӯъҳо ё паёмҳои версиявӣ анҷом дода мешавад.

Назорати версия

Новобаста аз он ки кадом модел, татбиқи назорати версия дар интерфейс ҳам имконпазир ва ҳам муҳим аст. Барои намуна:

  • Дар REST, мо /api/v1/… ва /api/v2/ дорем.


  • Бо gRPC/protobuf, механизмҳои пурқувват барои мутобиқати ақиб/пеш мавҷуданд - майдонҳо, паёмҳо ва усулҳои навро бидуни шикастани муштариёни кӯҳна илова кардан мумкин аст, дар ҳоле ки дигарон ҳамчун бекоршуда қайд карда мешаванд.


  • Дар меъмории ба рӯйдодҳо асосёфта, шумо метавонед форматҳои кӯҳна ва навро дар баробари интишор кунед, то ҳама истеъмолкунандагон муҳоҷират кунанд.

Масъулияти тақсимшуда

Принсипи асосӣ ин аст, ки гурӯҳе, ки маълумотро дорад, тасмим мегирад, ки чӣ гуна нигоҳдорӣ ва идора кардани онро интихоб кунад, аммо онҳо набояд дастрасии мустақими навиштанро ба хидматҳои дигар диҳанд. Дигарон бояд дар муқоиса бо таҳрири маълумоти хориҷӣ аз API гузаранд. Ин тақсимоти масъулиятро равшантар медиҳад: Агар хидмати А вайрон бошад, пас хидмати А барои ислоҳи он аст, на ҳамсояҳо.

Намунаҳои муштараки хидматрасонӣ

Дар доираи як дастаи ягона

Дар назари аввал, агар ҳама чиз дар як даста бошад, пас чаро корҳоро бо API мураккаб кардан лозим аст? Дар асл, ҳатто агар шумо як маҳсулот ба модулҳо тақсим карда бошед, ҷадвали муштарак метавонад ба ҳамон мушкилот оварда расонад.


  • Беҳтар аст, ки "фасад" ё "микросервис"-ро эҷод кунед, ки масалан, ҷадвали "фармоишҳо"-ро дорад ва баъд модулҳои дигар (ба монанди таҳлил) ин фасад/хизматро меноманд.


  • Ин принсипи шартномаро возеҳ нигоҳ медорад ва ислоҳи ислоҳро осон мекунад.


Масалан, хидмати фармоишҳо соҳиби ҷадвали фармоишҳо мебошад ва хидматрасонии ҳисоббаробаркунӣ мустақиман ба он ҷадвал дастрасӣ надорад - он ба нуқтаҳои ниҳоии хидмати Фармоишҳо занг мезанад, то тафсилоти фармоишро дарёфт кунад ё фармоишро ҳамчун пардохт қайд кунад.

Дар байни ду даста

Дар сатҳи баландтар, вақте ки ду ё зиёда дастаҳо барои соҳаҳои гуногун масъуланд, принсипҳо якхела боқӣ мемонанд. Масалан:

  • Гурӯҳи A барои хидмати каталоги маҳсулот масъул аст, ки дорои маълумот дар бораи ҳар як ашё (нарх, мавҷудият, атрибутҳо).


  • Гурӯҳи B ба хидматрасонии аробаҳои харид ғамхорӣ мекунад.


Агар дастаи В бевосита ҷадвали “Каталог”-и мутааллиқ ба дастаи Аро дархост кунад, ҳама гуна тағйироти схемаи дохилӣ дар А (масалан, илова кардани майдонҳо, тағир додани сохтор) метавонад ба дастаи В таъсир расонад.


Муносибати дуруст ин истифодаи API аст: Гурӯҳи A нуқтаҳои ниҳоӣ ба монанди GET /catalog/items , GET /catalog/items/{id} ва ғайраро таъмин мекунад ва Гурӯҳи B ин усулҳоро истифода мебарад. Агар A қодир бошад, ки версияҳои кӯҳна ва навтарро дастгирӣ кунад, онҳо метавонанд /v2-ро озод кунанд, ки ба B вақти муҳоҷиратро медиҳад.

Ҷанбаҳои ташкилӣ ва манфиатҳо

Муоширати шаффоф

Бо шартномаи расмӣ, ҳама тағиротҳо намоён мешаванд: дар Swagger/OpenAPI, файлҳои .proto, ё ҳуҷҷатҳои ҳодиса. Ҳар як навсозиро метавон пешакӣ баррасӣ кард, дуруст санҷида ва ба нақша гирифта, бо стратегияҳои мутобиқати пас аз зарурат.

Рушди тезтар

Тағирот дар як хидмат ба дигарон камтар таъсир мерасонад. Ба даста лозим нест, ки дар бораи "шикандан" ягон каси дигар хавотир нашаванд, агар онҳо майдонҳои нав ва кӯҳна ё нуқтаҳоро дуруст идора кунанд ва гузариши ҳамворро таъмин кунанд.

Идоракунии дастрасӣ ва амният

Шлюзҳои API, аутентификатсия ва авторизатсия (JWT, OAuth) барои хидматҳо стандартӣ мебошанд, аммо бо ҷадвали муштарак қариб ғайриимкон аст. Танзими дастрасӣ (кӣ метавонад ба кадом усулҳо занг занад), сабтҳо, пайгирии омори истифода ва ҷорӣ кардани квота осонтар аст. Ин системаро бехатартар ва пешгӯинашаванда мегардонад.

Хулоса

Ҷадвали муштарак дар пойгоҳи додаҳо тафсилоти татбиқ аст, на созишномаи байни хидматҳо, бинобар ин шартнома ҳисобида намешавад. Масъалаҳои зиёд (версияи мураккаб, тағироти бесарусомон, моликияти норавшан, амният ва хатарҳои иҷроиш) ин равишро дар муддати тӯлонӣ ғайриимкон мегардонанд.


Муносибати дуруст Шартномаи аввал аст, ки маънои муайян кардани ҳамкорӣ тавассути тарҳрезии расмӣ ва риояи принсипи он, ки ҳар як хидмат соҳиби маълумоти он боқӣ мемонад. Ин на танҳо ба кам кардани қарзи техникӣ мусоидат мекунад, балки шаффофиятро афзоиш медиҳад, рушди маҳсулотро суръат мебахшад ва имкон медиҳад, ки тағироти бехатарро бидуни иштирок дар сӯхторҳо аз рӯи схемаҳои пойгоҳи додаҳо анҷом диҳанд.


Ин ҳам як масъалаи техникӣ (чӣ гуна тарҳрезӣ кардан ва ҳамгироӣ кардан) ва масъалаи ташкилӣ (чӣ гуна дастаҳо муошират мекунанд ва тағиротро идора мекунанд) мебошад. Агар шумо хоҳед, ки маҳсулоти шумо бидуни сар задани ҳолатҳои фавқулоддаи беохир дар бораи схемаҳои пойгоҳи додаҳо афзоиш ёбад, пас шумо бояд дар бораи шартномаҳо фикр кунед, на дастрасии мустақим ба пойгоҳи додаҳо.

L O A D I N G
. . . comments & more!

About Author

Aleksei Kish HackerNoon profile picture
Aleksei Kish@truewebber
just write code from time to time

ТЕГИ овезон кунед

ИН МАКОЛА ДАР...