Ачааллж байна...
Та энэ мөрийг уншиж байгаа бол хоёр сургалтыг ардаа орхисон хүн байна. Эхний сургалт дээр та print("Сайн байна уу") гэж бичээд, дэлгэц дээр гарч ирсэн эхний үгэндээ баярлаж байсан. Хоёр дахь сургалт дээр та type hint бичиж, decorator-ыг тайлж ойлгож, өөрийн гараар API руу хүсэлт илгээж, эцэст нь жижигхэн FastAPI программ ажиллуулж үзсэн. Тэр мөч — терминал дээр сервер асаж, browser дээрээ өөрийнхөө буцаасан JSON-ыг харсан мөч — энэ сургалтын эхлэл юм. Бид яг тэндээс үргэлжлүүлнэ.
Энэ сургалт нэг тодорхой зорилготой. Та үүнийг дуусгахдаа зөвхөн FastAPI-г "мэддэг" болохгүй, харин бодит вэб API бүтээж чаддаг болно. Өгөгдлөө хадгалдаг, буруу өгөгдлийг татгалздаг, алдааг зөв мэдээлдэг, олон файлд цэгцтэй тархсан, хамгаалалттай API. Ийм программыг бүтээж чаддаг хүнийг дэлхий дээр backend developer гэж нэрлэдэг бөгөөд энэ бол хийсвэр цол биш, өдөр бүр хийгддэг бодит ажил юм.
Таны утсан дээрх аль ч аппликейшныг төсөөлье. Цаг агаарын апп нээхэд хэдэн секундын дотор Улаанбаатарын температур гарч ирдэг. Тэр тоо таны утсанд хадгалагдаагүй. Тэр тоо хаа нэгтээ, өөр компьютер дээр байдаг бөгөөд таны утас түүн рүү хүсэлт илгээж, хариуг нь авчирдаг. Тэрхүү "өөр компьютер дээр байдаг, хүсэлт хүлээж авдаг, хариу буцаадаг" программыг API гэж нэрлэдэг. Курс 2-ын Бүлэг 11-д та энэ ажлыг хэрэглэгчийн талаас хийж үзсэн: requests сан ашиглан бусдын API руу хүсэлт илгээж, JSON хариуг задалж байсан. Энэ сургалт дээр та ширээний нөгөө талд суух болно. Одооноос та бол хүсэлт илгээгч биш, харин хүсэлт хүлээн авагч — та өөрөө тэр API-г бичнэ.
Энэ бол зүгээр нэг сэдвийн ялгаа биш, харин үүрэг хариуцлагын ялгаа юм. Хэрэглэгч байхад та хүлээж авсан өгөгдөлдөө найдаж болно. Харин API бичиж байхад та бол найдвартай тал нь болно. Хэн нэгэн буруу өгөгдөл илгээвэл та түүнийг эелдэгээр татгалзах ёстой. Хэн нэгэн байхгүй зүйл хайвал та тодорхой хариу өгөх ёстой. Хэн нэгэн зөвшөөрөлгүйгээр өгөгдөл өөрчлөхийг оролдвол та зогсоох ёстой. Энэ бүхнийг хэрхэн хийхийг энэ сургалт зааж өгнө.
Курс 2-т бид client болон server-ийг зочин ба зөөгч гэж зүйрлэж байсан. Зочин захиалга (request) өгдөг, зөөгч гал тогоо руу очиж, аяга хоол (response) авчирдаг. Тэр үед та зочин байсан. Одоо та зоогийн газрын эзэн боллоо.
Энэ зүйрлэлийг арай гүнзгий үргэлжлүүлье, учир нь бид түүнийг бүх сургалтын туршид ашиглана. Цэс гэдэг бол API өөрөө — зочин юу захиалж болохыг тодорхойлсон жагсаалт. Цэсэн дэх нэг хоол бүрийг бид endpoint гэж нэрлэнэ: "хоолны жагсаалт харах" гэдэг нэг endpoint, "тодорхой нэг хоолны найрлагыг харах" гэдэг өөр endpoint, "шинэ захиалга өгөх" гэдэг гурав дахь endpoint. Зочин цэсэнд байхгүй хоол захиалвал зөөгч эелдэгээр "уучлаарай, тийм хоол байхгүй" гэж хэлдэг — энэ бол таны API-ийн буцаах 404 хариу. Зочин "хоёр биш, хасах гурван шарсан мах" гэж захиалвал зөөгч захиалгыг хүлээж авахгүй — энэ бол таны API-ийн validation. Ажилтны өрөө рүү орох гэсэн зочныг үнэмлэхгүй бол оруулахгүй — энэ бол таны API-ийн хамгаалалт.
Сургалтын явцад энэ зүйрлэлийн эд ангиуд нэг нэгээрээ бодит код болж хувирахыг та харах болно. Одоохондоо зүгээр л энэ зургийг толгойдоо хадгалж авахад л хангалттай.
Бид энгийнээр эхэлнэ. Түвшин 1-д та нэг мөр код бичээд browser дээрээ JSON харна. Дараа нь хаяг доторх утга авч сурна (/books/3 гэсэн хаягны 3 гэдэг тоог хэрхэн барьж авах вэ), хайлтын параметр авч сурна (/books?search=Python гэсний search-ийг). Түвшин 1-ийн төгсгөлд та бодит өгөгдөл өгдөг, жагсаалт харуулдаг, байхгүй зүйл дээр 404 буцаадаг API-тай болно.
Түвшин 2-т Pydantic гэдэг зүйлтэй танилцана. Энэ бол таны API-д ирж буй өгөгдлийг шалгадаг хатуу шаардлагатай маягт юм. Курс 2-ын Бүлэг 9-д та dataclass бичиж, type hint тавьж, default утга өгч байсан — тэр гурвалын шууд үргэлжлэл нь Pydantic. Энд та эхний удаа өгөгдөл хүлээж авах болно: хэрэглэгч шинэ тэмдэглэл нэмэх, засах, устгах. Тэгээд Түвшин 2-ын төгсгөлд бид хамтдаа Тэмдэглэлийн API бүтээнэ.
Энэхүү Тэмдэглэлийн API бол энэ сургалтын нугалаа шиг зүйл — бид түүнийг гурван удаа авч үзнэ. Түвшин 2-т тэр API ажиллах болно, гэхдээ серверээ унтраахад бүх тэмдэглэл алга болно (учир нь тэд зөвхөн санах ойд байсан). Түвшин 3-т бид түүнийг олон файлд задалж, мэргэжлийн бүтэц өгч, бичих үйлдлүүдийг нь API key-ээр хамгаална. Түвшин 4-т бид түүнд жинхэнэ өгөгдлийн сан залгана — тэгээд серверээ унтраагаад дахин асаахад тэмдэглэлүүд газраасаа хөдлөөгүй байхыг харна. Тэр мөч бол энэ сургалтын хамгийн чухал мөчүүдийн нэг бөгөөд бид түүнийг зохих ёсоор тэмдэглэнэ.
Түвшин 5-д та эцсийн төслөө бүтээнэ: Номын сангийн API. Курс 2-ын номын сангийн систем санаанд орж байна уу — Book, Member, зээлэх, буцаах? Тэр программ энэ удаад бодит вэб үйлчилгээ болж дахин төрнө. Өгөгдлийн сантай, олон router-тэй, хамгаалалттай, автомат баримтжуулалттай. Гурван сургалтын аян тэнд оргилдоо хүрнэ.
Сургалт бүр ямар нэг хилтэй байдаг бөгөөд тэр хилээ нуух нь суралцагчийг хуурсан хэрэг болно. Тиймээс шууд хэлье.
Бид жинхэнэ хэрэглэгчийн нэвтрэлт (OAuth2, JWT token, нууц үг хадгалах) заахгүй. Та API key ашиглан бичих үйлдлээ хамгаалж сурна — энэ нь бодит бөгөөд ашигтай арга боловч "хэрэглэгч бүр өөрийн бүртгэлтэй, өөрийн өгөгдөлтэй" гэсэн систем биш. Тэр нь өөрөө том сэдэв бөгөөд бид эцсийн бүлэгт түүнийг чиглэл болгон нэрлэж өгнө.
Бид deployment-ийг алхам алхмаар заахгүй. Өөрөөр хэлбэл таны API-г интернэтэд гаргаж, дэлхийн хэн ч хандах боломжтой болгох ажлыг гараар хийж үзэхгүй. Гэхдээ deployment гэж юу болох, юу шаарддагийг ойлголтын түвшинд бүрэн тайлбарлана. Хэрэгслүүд байнга өөрчлөгддөг тул тэднийг заах нь хоёр жилийн дараа хуучирдаг; ойлголт хуучирдаггүй.
Мөн бид PostgreSQL зэрэг том өгөгдлийн сан, migration, background task, WebSocket, testing framework, frontend хөгжүүлэлт заахгүй. Эдгээрийн зарим нь дараагийн сургалтуудын сэдэв, зарим нь таны өөрөө судлах зам. Бүлэг 15 бүгдийг нь нэрлэж, хаанаас эхлэхийг зааж өгнө.
Энэ жагсаалтыг уншаад бага зэрэг гонсойх нь энгийн зүйл. Гэхдээ анзаараарай: үлдсэн нь бол бүрэн ажиллагаатай, өгөгдлийн сантай, хамгаалалттай, баримтжуулагдсан вэб API. Ийм зүйл бүтээж чаддаг хүн олон биш.
Энэ сургалтын дүрэм өмнөх хоёр сургалтынхтай яг адилхан бөгөөд өөрчлөгдөхгүй.
Шалгалт байхгүй. Гэрийн даалгавар байхгүй. Тест байхгүй. Та хичээлүүдийг үзэж дуусгах л хэрэгтэй; гэрчилгээ авахад өөр шаардлага байхгүй. Хичээл дотор "туршаад үзээрэй" гэсэн саналууд гарч ирнэ — тэдгээр нь заавал биш, санал төдий. Хийвэл сайн, хийхгүй бол дараагийн хичээл таныг тэдгээрийг хийсэн гэж таамаглахгүй.
Хурд гэж байхгүй. Долоо хоногт хоёр хичээл үзвэл энэ сургалт дөрөв орчим сар үргэлжилнэ. Гэхдээ энэ бол хуваарь биш, тооцоолол. Нэг хичээл дээр гурван өдөр суувал тэр гурван өдөр үрэгдээгүй.
Алдаа бол хэвийн зүйл. Энэ сургалтад та маш олон алдааны мэдэгдэл харна — терминал дээрх Python-ы улаан үсэгтэй traceback, browser дээрх JSON хэлбэрийн алдаанууд. Бид тэдгээрийг нуухгүй. Харин ч бид тэднийг зориудаар гаргаж, хамтдаа уншиж, юу гэж хэлж байгааг мөр мөрөөр нь тайлбарлана. Алдааны мэдэгдэл уншиж чаддаг хүн бол programmer; уншиж чаддаггүй хүн бол код хуулагч.
Энэ сургалт дээр та API-ийн хэрэглэгч биш, зохиогч болно.
Эцсийн үр дүн: өгөгдлийн сантай, хамгаалалттай, олон файлт, автоматаар баримтжуулагдсан бодит вэб API.
Тэмдэглэлийн API нь сургалтыг холбогч утас — v1 (санах ойд), v2 (цэгцтэй бүтэц), v3 (өгөгдлийн сан) гэж гурван удаа төлөвшинө.
Эцсийн төсөл нь Номын сангийн API — Курс 2-ын номын сангийн систем вэб үйлчилгээ болж дахин төрнө.
Заахгүй зүйлс: жинхэнэ хэрэглэгчийн нэвтрэлт, алхам алхмын deployment, том өгөгдлийн сан. Эдгээрийг Бүлэг 15-д чиглэл болгон нэрлэнэ.
Шалгалт, гэрийн даалгавар, хурдны шаардлага байхгүй.
Дараагийн хичээл дээр бид ажлын орчноо бэлдэнэ: тусдаа өрөө (virtual environment) үүсгэж, FastAPI-г суулгаж, эхний серверээ асаана. Тэнд та эхний удаа "миний компьютер дээр сервер ажиллаж байна" гэж хэлж чадна.
Бүртгэлтэй болсноор энэ сургалтын бүх хичээлд хандах эрх авна.