Client
Приклад:
REST Client
7.; Thick client або fat client — client, який виконує значну частину логіки локально.; Чи є собою server-side validation?; !; name </syntaxhighlight>
curl https://api.example.com/status
CLI client — command-line interface програма, яка звертається до service або API.; Критично: якщо secret потрапив у client, він більше не secret.; API й server мають перевіряти permissions незалежно від frontend.; Browser = client
- email client;
- database client;
- chat client;
- IDE;
- FTP client;
- game launcher;
- cloud sync app;
- remote desktop client;
- VPN client;
- Git GUI client.;
істотно: proxy має змогу змінити network behavior: headers, latency, TLS, caching або доступність ресурсів.; Приклади:
Чи підтримуються старі client versions?; * Матеріали щодо authentication, authorization, client-side security, caching, offline sync і error handling.; Client має вміти обробляти помилки.;== Цікавий факт == Authorization: Bearer token
Ризики:
</div>
Client → Request → Server
Game client має змогу:
'''Практична роль:''' HTTP client — це інструмент, який надає можливість програмі “говорити” з web server або API.; Але server-side validation все одно потрібна.;=== Multiplayer game ===
Server returns HTML
Developer відкриває database client, підключається до PostgreSQL server і виконує SQL queries.;== Client і Secrets ==
* mocks;
* stubs;
* test server;
* contract testing;
* recorded responses;
* sandbox environment.; Приклади HTTP clients:
== Цікаві факти про Client ==
'''Frontend client''' — клієнтська частина web application, яка функціонує в browser або webview.; '''істотно:''' sync — одна з найскладніших частин offline-first clients.; Окремий client потрібен, якщо:
Ризики:
<syntaxhighlight lang="text">
== Client у Microservices ==
'''істотно:''' retry має змогу допомогти при тимчасовій проблемі, але має змогу й погіршити збій, якщо всі clients почнуть повторювати запити одночасно.; * Backend service теж має змогу бути client, коли звертається до іншого service.; '''Практична роль:''' навіть якщо server швидкий, повільний client має змогу зробити весь застосунок неприємним для користувача.; Застосунку не завжди потрібні admin-права до бази.; '''BFF''' або '''Backend for Frontend''' — backend-шар, створений спеціально під потреби конкретного client-а.;
</syntaxhighlight> class MockPaymentClient {
Game Client
HTTP request example:
Практична роль: GraphQL client надає можливість client-у точніше описати, які саме інформаційні дані йому потрібні.; Найлюдяніший факт: client — це обличчя системи.;
</syntaxhighlight>
Критично: client можна змінити або обійти.; істотно: client state зручний для UX, але server не повинен сліпо довіряти даним, які приходять від client.; Database client — програма або бібліотека, яка підключається до database server.; істотно: client і server — це ролі у взаємодії.; Client надсилає POST /api/profile Desktop client — програма, встановлена на комп’ютері, яка звертається до server, cloud service або локальних ресурсів.; Практична роль: response — це результат, який client отримує після свого запиту.; 1.; * логіка дуже проста;
- достатньо server-rendered pages;
- немає offline mode;
- немає складного state;
- немає mobile-specific UX;
- немає потреби в rich frontend;
- users технічні й CLI достатній;
- API застосовується лише внутрішньо.; Client у SSR все одно важливий, бо він:
- frontend monitoring;
- mobile crash reporting;
- real user monitoring;
- performance metrics;
- error tracking;
- network traces;
- session diagnostics у дозволених межах;
- version adoption;
- feature usage;
- Core Web Vitals у web-сценаріях.; }
Client має враховувати:
Джерела
HTTP clients використовують для:
Client Update
Authentication на Client
</syntaxhighlight>
return response.json();
</syntaxhighlight>
Загальний характеристика
Головна перевага: client-server model надає можливість одному server обслуговувати багато різних clients.; Server-side rendering або SSR — підхід, де server генерує HTML, а client отримує вже готовішу сторінку.;
== Client Caching ==
DELETE /sessions/current
4.; Browser sends HTTP request
== Коли Client можна спростити ==
Чи є собою accessibility checks?; User-Agent має змогу допомагати:
* простіше оновлювати;
* менше локальних вимог;
* централізований контроль;
* легше адмініструвати.; * debugging;
* analytics;
* compatibility;
* rate limiting;
* support;
* security monitoring;
* API client identification.; '''Response''' — відповідь server на request client-а.; '''Практична роль:''' testing client-а сприяє перевірити не тільки “чи функціонує server”, а й “чи правильно client реагує на різні відповіді”.;== User Agent ==
* швидша робота;
* менше network traffic;
* кращий offline mode;
* менше server load;
* кращий UX.; '''істотно:''' SSR не означає, що client “нічого не робить”.;<div style="background:#f0eaff; border-left:6px solid #8e44ad; padding:12px; margin:12px 0;">
У software engineering client має змогу бути браузером, mobile app, desktop application, frontend application, API client, HTTP client, game client, email client, database client, SDK або навіть іншим backend service, який звертається до API.; '''Практична роль:''' web client перетворює web server response на сторінку або застосунок, з яким взаємодіє користувач системи.; web server забезпечується через Слово '''client''' у технологіях не завжди означає “людину-клієнта”.; GraphQL client має змогу:
Web application
Головна думка: client — це сторона, яка просить і взаємодіє.; Server має змогу обмежувати кількість requests від client.;
- вважати frontend перевірку достатньою для security;
- зберігати API secrets у client;
- не обробляти network errors;
- не ставити timeout;
- робити нескінченні retries;
- не враховувати old mobile clients;
- кешувати sensitive data;
- довіряти role або price з client payload;
- не робити server-side validation;
- показувати технічні error messages користувачу;
- не тестувати slow network;
- не думати про accessibility;
- не логувати client-side crashes;
- плутати client і server responsibilities;
- робити занадто товстий client без потреби.; істотно: network client має бути готовим до того, що мережа іноді повільна, нестабільна або недоступна.;
- надсилати queries;
- кешувати normalized data;
- керувати fragments;
- оновлювати UI;
- підтримувати subscriptions;
- генерувати types;
- обробляти errors.; Email client має змогу використовувати:
застосовується для: Небезпека: server не має вважати client “чесним”.; }
- desktop IDE;
- professional graphics editor;
- offline-first mobile app;
- CAD software;
- game client;
- email client із local mail storage.; * debugging;
- support;
- API compatibility;
- mobile app updates;
- desktop auto-update;
- analytics;
- feature rollout;
- deprecation management;
- security patches.; Після hydration сторінка має змогу:
Server має змогу:
* psql для PostgreSQL;
* MySQL client;
* MongoDB shell;
* DBeaver;
* DataGrip;
* pgAdmin;
* SQL Server Management Studio;
* application database driver;
* ORM client.; Приклад:
Frontend client має змогу бути створений за допомогою:
'''Client-server architecture''' — модель, у якій client надсилає запити, а server їх обробляє.; CSR часто застосовують, коли потрібно в single-page applications.;<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
* є собою користувацький UI;
* потрібен mobile app;
* потрібен desktop app;
* є собою public API;
* потрібна інтеграційні функціональні можливості з іншим service;
* потрібен CLI;
* потрібен SDK;
* є собою offline mode;
* потрібно працювати з server віддалено;
* є собою кілька платформ;
* потрібен спеціальний UX для різних пристроїв.;== Browser як Client ==
Що можна мати на client:
Thick client має змогу:
'''Проста аналогія:''' SSR дає сторінці тіло, а hydration додає нервову систему.;<syntaxhighlight lang="http">
</div>
== Server-Side Rendering і Client ==
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
Приклад curl:
Браузер — найвідоміший приклад client.;<syntaxhighlight lang="typescript">
* сильна залежність від network;
* server load вищий;
* offline mode слабкий;
* latency має змогу бути помітною.; Wait forever
== Sync ==
переважні аспекти:
== Висновок ==
API client зазвичай виконує:
* local storage;
* cookies;
* cache;
* logs;
* analytics;
* crash reports;
* screenshots;
* clipboard access;
* permissions;
* location;
* camera;
* microphone;
* contacts;
* health data;
* message previews.; Приклад ідеї:
переважні аспекти:
Database client має змогу:
Client має змогу працювати з приватними даними.; 5.; return { status: "success" };
* memory;
* local storage;
* session storage;
* cookies;
* IndexedDB;
* mobile secure storage;
* local database;
* cache.; Найцікавіше, що один і той самий застосунок має змогу бути і client, і server одночасно.;== Типові помилки початківців ==
* показує зрозуміле повідомлення;
* не губить user input;
* дає retry;
* не розкриває зайві technical details;
* логуватиме помилки для diagnostics;
* відрізняє user error від server error.; Client має змогу тестуватися окремо або разом із server.;<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
<syntaxhighlight lang="typescript">
Чи кеш не містить sensitive data?;<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
'''Mobile client''' — застосунок на смартфоні або планшеті, який звертається до backend, API або cloud service.; * Практики distributed systems, microservices, API gateways, BFF, observability, testing і software architecture.;</div>
Приклад:
API gateway має змогу бути проміжним server-side шаром між clients і backend services.; Server перевіряє authorization
</div>
Приклади:
Приклади:
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
* UI;
* routing;
* user input;
* forms;
* client-side validation;
* API calls;
* state management;
* caching;
* error messages;
* accessibility;
* animations;
* rendering;
* authentication flow;
* session handling.;== Thick Client ==
'''Критично:''' усе, що потрапляє на client, потрібно вважати потенційно видимим або змінюваним користувачем.; Server має перевіряти інформаційні дані повторно.; * Найкращий client часто непомітний: він оперативно реагує, зрозуміло пояснює помилки й не змушує користувача думати про мережу.;== Thin Client ==
* не звертатися до real API;
* тестувати service logic;
* контролювати responses;
* симулювати errors;
* прискорити tests;
* уникнути costs;
* перевірити edge cases.; Server validates input
як ілюстрація, замість ручних HTTP requests:
== Client і Server ==
'''Практична порада:''' хороший API client не “б’є собою” server нескінченними requests, а поводиться ввічливо й передбачувано.;== HTTP Client ==
</div>
</div>
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
API Client
Приклад: {{SEO
- розділення відповідальностей;
- незалежна розробка програмного забезпечення client і server;
- краща масштабованість;
- супровід різних clients;
- централізована business logic на server;
- зручні API;
- легше оновлювати server;
- можливість mobile, web і desktop clients;
- security control на backend;
- інтеграції через API.; Погано:
- краще offline;
- швидша локальна реакція;
- менше server load;
- багатший UX;
- доступ до system resources.; Роль
- passwords;
- tokens;
- private messages;
- payment data;
- зайві personal data;
- sensitive form content.; Client має змогу логувати:
</div>
'''Практична роль:''' offline client корисний там, де інтернет нестабільний, але користувач системи має продовжувати роботу.;== Client і Contract Testing ==
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
"name": "Anna"
{
* Browser — це client, але сучасний browser має змогу виконувати величезну частину application logic.;<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
}
<div style="background:#fdecea; border-left:6px solid #e74c3c; padding:12px; margin:12px 0;">
== Client і Logging ==
'''Практична роль:''' request — це спосіб client сформулювати, що саме йому потрібно від server.; Недоліки:
</div>
DesktopClient 5.4.0
Приклади:
'''істотно:''' backend service як client теж має бути стійким до network failures, slow dependencies і partial outages.; Client перевіряє форму
* HTML page;
* JSON data;
* image;
* file;
* authentication token;
* payment confirmation;
* search results;
* user profile;
* chat messages;
* game state.;</div>
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
'''Практична роль:''' contract testing ловить ситуації, коли server змінив response, а client ще очікує старий формат.;== Client Security ==
* private API key у JavaScript bundle;
* database password у mobile app;
* signing key у desktop client;
* admin token у frontend;
* cloud secret у public repository;
* secret у source map.;</div>
Accept: application/json
</div>
HTTP/1.1 200 OK
const response = await fetch("https://api.example.com/users/123");
* keyboard navigation;
* screen reader support;
* semantic HTML;
* color contrast;
* focus states;
* readable fonts;
* captions;
* alt text;
* reduced motion;
* clear errors;
* touch target size;
* predictable navigation.; * API versioning;
* backward compatibility;
* feature detection;
* graceful degradation;
* deprecation policy;
* migration guides;
* telemetry по client versions.; async getUser(id: string) {
SDK 1.12.3
class UserApiClient {
BFF сприяє:
== Web Client ==
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
* network glitch;
* timeout;
* temporary server overload;
* 503 Service Unavailable;
* rate limit у частині scenarios;
* lost connection.; Для API clients особливо корисні:
'''Критично:''' client-side authentication state потрібен для UX, але справжня довіра має підтверджуватися на server.; * Client-side cache має змогу прискорити застосунок, але має змогу й показати застарілі або чутливі інформаційні дані.; Потрібно обережно ставитися до:
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
Backend service використовує payment API client, щоб створити payment intent і перевірити transaction status.; У сучасних web apps client і server часто ділять роботу.; Інакше tests можуть проходити, а production — ламатися.;</div>
<div style="background:#fef2f2; border-left:6px solid #ef4444; padding:12px; margin:12px 0;">
</div>
Game client надсилає player actions на game server, отримує world state і відображає результат на екрані гравця.;</div>
'''Offline client''' має змогу працювати без постійного підключення до server.;== Client і Observability ==
<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
'''API client''' — програма або бібліотека, яка звертається до API.; Один застосунок має змогу бути server для одного запиту й client для іншого.;<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
'''Circuit breaker''' — pattern, який тимчасово зупиняє requests до проблемного service.; user(id: "123") {
id
* не довіряти client-side data на server;
* не зберігати secrets у client;
* використовувати HTTPS;
* робити зрозуміле error handling;
* встановлювати timeouts;
* мати retry logic із backoff;
* кешувати обережно;
* перевіряти permissions на backend;
* підтримувати versioning;
* тестувати старі clients;
* оптимізувати performance;
* враховувати accessibility;
* мінімізувати персональні інформаційні дані в local storage;
* логувати errors без sensitive data;
* документувати API client behavior;
* використовувати contract testing для важливих API.; Frontend client відповідає за:
== Rate Limit і Client ==
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
'''Практична роль:''' update mechanism визначає, як оперативно команда має змогу виправити client-side bug або security issue.; |-
| Client
| Ініціює запит
| Browser, mobile app, API client
|-
| Server
| Обробляє запит і повертає відповідь
| Web server, API server, database server
|}
== Приклад client-server flow ==
Приклади web clients:
Приклад:
Але не варто логувати:
- unit tests;
- component tests;
- integration tests;
- end-to-end tests;
- contract tests;
- API client tests;
- visual regression tests;
- accessibility tests;
- performance tests;
- offline tests;
- compatibility tests.; Не все варто зберігати на client.;
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;"> Thin client зазвичай: * corporate networks; * caching; * security filtering; * API gateway; * reverse proxy; * debugging; * routing; * load balancing; * privacy tools; * development proxy.; '''Практична роль:''' client observability показує, що відбувається не в дата-центрі, а на пристроях реальних користувачів.;<syntaxhighlight lang="text"> == Retry Logic == '''Thin client''' — client, який виконує мінімум логіки, а більшість роботи віддає server.;<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;"> '''Практична роль:''' timeout захищає client від зависання через server або network problem.; Добрий client: Response має змогу містити: </div> <div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;"> <div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;"> Чи логуються client errors без приватних даних?; Client можна спростити, якщо: * перевірити request; * виконати business logic; * звернутися до database; * перевірити permissions; * сформувати response; * повернути error; * записати logs.; '''Game client''' — клієнтська частина гри, яка запускається на пристрої гравця.; Водночас server має залишатися джерелом довіри: він перевіряє authentication, authorization, validation і business rules.;== Ризики Client == '''Головне правило:''' client має бути зручним для користувача, але server має залишатися джерелом довіри й правил.;</div> </div> * images; * CSS; * JavaScript; * API responses; * user preferences; * offline pages; * GraphQL data; * search results; * static assets; * downloaded files.; * WebSocket client підтримує роботу постійний діалог із server, а не окремі request-response цикли.;== Client і API Gateway == '''Retry logic''' — повторна спроба request після тимчасової помилки.; переважні аспекти: * endpoint URLs; * authentication; * serialization; * retries; * pagination; * error handling; * rate limits; * response parsing.;<syntaxhighlight lang="text"> } Типи тестів: === Mobile banking app === == WebSocket Client == == Timeout == переважні аспекти: * не показувати admin menu; * вимкнути кнопку delete; * показати read-only mode; * приховати billing settings; * показати повідомлення “немає доступу”.;</div> <div style="background:#fef2f2; border-left:6px solid #ef4444; padding:12px; margin:12px 0;"> const response = await fetch(`${this.baseUrl}/users/${id}`, { } * web pages; * REST APIs; * GraphQL APIs; * file downloads; * webhooks testing; * service-to-service communication; * automation; * monitoring.; Краще: async charge() { <div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;"> Чи server не довіряє client-side даним?; Client має змогу помилитися, застаріти або бути навмисно зміненим.; Observability для client охоплює: <div style="background:#fdecea; border-left:6px solid #e74c3c; padding:12px; margin:12px 0;"> '''REST client''' — client для REST API.; '''Практична роль:''' client-side rendering робить browser активним учасником побудови interface, а не без ускладнень отримувачем готового HTML.; Чи є собою зрозумілі error messages?;== Network Client == Чи не зберігаються secrets у client?; як ілюстрація, браузер є собою client; додатково реалізовано мобільний застосунок є собою client для backend API, а програма для підключення до PostgreSQL є собою database client.; Client-side logging сприяє зрозуміти проблеми в реальних користувачів.; Стан circuit breaker: </div> </div> '''Практична роль:''' такий class приховує деталі HTTP request і дає застосунку простий method `getUser`.;
const socket = new WebSocket("wss://example.com/chat");
</div>
* web applications;
* mobile apps;
* desktop software;
* client-server architecture;
* APIs;
* HTTP communication;
* databases;
* email systems;
* multiplayer games;
* cloud services;
* microservices;
* command-line tools;
* SDKs;
* remote desktop;
* streaming platforms;
* messaging applications.; * GraphQL client має змогу сам описати, які поля йому потрібні.;</div>
Client, особливо frontend або mobile app, має бути доступним для різних користувачів.; * Матеріали з client-server architecture і network programming.;== Hydration ==
POST /orders
* старий mobile client очікує старий API;
* новий frontend використовує нове поле;
* desktop client не оновився;
* SDK version відстає;
* browser не підтримує роботу feature;
* breaking API changes.; SDK має змогу приховувати:
'''Цікавий момент:''' BFF існує з цієї причини, що mobile client, web client і admin client часто потребують різних даних, навіть якщо працюють із тим самим продуктом.;== Client Error Handling ==
</div>
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
== Client-Server Architecture ==
* зберігати local data;
* ставити changes у queue;
* синхронізувати пізніше;
* показувати cached content;
* вирішувати conflicts;
* працювати з local database;
* показувати offline status.; Client performance впливає на user experience.;</div>
'''Проста різниця:''' HTTP client зазвичай питає й отримує відповідь, а WebSocket client тримає розмову відкритою.; 2.; Хороший client швидкий, зрозумілий, безпечний, стійкий до помилок мережі й не зберігає секрети там, де їх має змогу побачити користувач системи.; '''Web client''' — client, який взаємодіє з web server або web application.;== Database Client ==
</div>
Поширені помилки:
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
Client зазвичай відповідає за:
</div>
== Email Client ==
9.; Якщо ці двері незручні або недоступні, частина людей без ускладнень не зможе увійти.;== Хороші практики Client ==
'''Client-side rendering''' або '''CSR''' — підхід, де browser отримує JavaScript application і сам будує UI.; }
}
'''SDK''' або client library має змогу бути готовим client-ом для API.; Добрі практики:
Чи зрозуміло, який server або API використовує client?; * automation;
* scripting;
* DevOps;
* debugging;
* administration;
* CI/CD;
* power users.; Він має змогу:
'''істотно:''' breaking change на server має змогу зламати clients, які команда вже не контролює напряму.; CLI 0.9.8
Client відповідає за взаємодію з користувачем або іншою системою, надсилання requests, обробку responses, локальний state, caching, error handling і UX.;<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
* показувати UI;
* надсилати API requests;
* працювати з push notifications;
* використовувати camera;
* використовувати GPS;
* кешувати інформаційні дані offline;
* синхронізувати інформаційні дані;
* зберігати tokens;
* працювати з biometric login;
* обробляти deep links.;=== Database administration ===
Моделі актуалізація:
'''WebSocket client''' підтримує роботу постійне двостороннє з’єднання із server.;<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
* network error;
* timeout;
* 401 Unauthorized;
* 403 Forbidden;
* 404 Not Found;
* 409 Conflict;
* 429 Too Many Requests;
* 500 Server Error;
* validation error;
* offline state;
* parsing error.; * Документація HTTP, browser APIs, REST, GraphQL, WebSocket і API design.; Client показує success або error
Client caching зберігає інформаційні дані або ресурси ближче до користувача.; Browser відкриває сайт, завантажує frontend client, а той звертається до backend API для отримання user profile і dashboard data.; Client має змогу бути browser, frontend app, mobile app, desktop app, API client, HTTP client, database client, CLI tool, SDK або backend service у ролі споживача іншого API.; Server повертає response
Client має змогу приховувати кнопки або сторінки, якщо користувач системи не має permissions.;<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
'''істотно:''' не кожному продукту потрібен складний frontend client.;</div>
'''істотно:''' client-side validation — це зручність, а не security boundary.; * `git`;
* `kubectl`;
* `aws`;
* `gcloud`;
* `az`;
* `psql`;
* `mysql`;
* `curl`;
* `gh`;
* `docker`.; '''Практична роль:''' frontend client — це частина застосунку, яку користувач системи бачить і через яку взаємодіє з backend.; Чи є собою безпечний retry logic?; Приклади REST-запитів:
Проблеми:
</div>
'''істотно:''' server часто має підтримувати старі clients, особливо mobile apps, які користувачі не оновлюють одразу.; Web client має змогу:
== Authorization на Client ==
'''Проста різниця:''' client просить, server відповідає.;== Client і Privacy ==
Clients звертаються до gateway, а gateway:
== Circuit Breaker у Client ==
'''Найлюдяніший сенс:''' client — це двері до сервісу.;
</div>
'''Проста аналогія:''' circuit breaker — це запобіжник: якщо платформа перевантажена, він розриває ланцюг, щоб не спалити все інше.; * отримує HTML;
* виконує hydration;
* обробляє user interactions;
* надсилає API requests;
* керує frontend state;
* завантажує scripts і assets.;
Client compatibility — здатність server або API працювати з різними версіями clients.;== Див.; додатково ==
- required fields;
- email format;
- password length;
- number range;
- file size;
- date format;
- local form rules.; Client state — інформаційні дані, які client зберігає або тримає під час роботи.; Mock client — тестова заміна реального client-а.; Проста думка: email client — це інтерфейс до поштового сервера, який зберігає й передає повідомлення.;
Рекомендовано: Request має змогу містити: '''GraphQL client''' — client, який виконує GraphQL queries і mutations.; '''Timeout''' — обмеження часу очікування response.; '''Практична роль:''' REST client комфортно функціонує з ресурсами через стандартні HTTP-операції.;</div> </div> '''Практична роль:''' SDK робить роботу з API простішою й менш помилковою для developers.; * адаптувати API під UI; * зменшити кількість requests; * приховати complexity; * оптимізувати response format; * керувати authentication; * відокремити client-specific logic.; '''Небезпека:''' найтиповіша помилка — думати, що якщо кнопка прихована в UI, то дія справді заборонена.; Його потрібно rotate.; * надсилати HTTP requests; * отримувати HTML, CSS, JS; * виконувати JavaScript; * керувати cookies; * застосовувати security policies; * кешувати ресурси; * показувати сторінки; * запускати frontend applications; * відкривати developer tools; * підтримувати extensions.; REST client функціонує з: У microservices один service часто є собою client для іншого service.; Найчастіше це browser.;<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;"> Приклади: Недоліки: * HTTP client; * SSH client; * FTP client; * DNS client; * email client; * VPN client; * database client; * game client; * messaging client.; '''істотно:''' mock client має відповідати реальному контракту API.; Приклади: Client застосовується в багатьох технологічних контекстах: '''Hydration''' — бізнес-процес, коли client-side JavaScript “оживляє” HTML, згенерований server.; Accept: "application/json" * endpoint; * request format; * response format; * status codes; * required fields; * optional fields; * error structure; * compatibility rules.;</div> <div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;"> * Outlook; * Thunderbird; * Apple Mail; * Gmail web interface; * mobile mail app; * command-line mail clients.;<div style="background:#f0eaff; border-left:6px solid #8e44ad; padding:12px; margin:12px 0;"> * інтерактивний UX; * швидкі переходи після завантаження; * багатий frontend; * менше повних перезавантажень сторінки.;</div> Accessibility охоплює: Mobile client має змогу: == Client Compatibility == </div> '''істотно:''' production database client має використовувати least privilege.; '''Практична роль:''' User-Agent сприяє server зрозуміти, який client звертається до нього.;<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;"> * Google Chrome; * Mozilla Firefox; * Safari; * Microsoft Edge; * embedded browser views; * headless browsers; * webviews у mobile apps.; Server має змогу бути дуже розумним, але користувач системи судить програмний продукт через те, що бачить і відчуває в client.; У multiplayer games game client часто спілкується з game server.;== Client у Testing == <div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;"> Desktop client має змогу мати: * database driver; * cloud SDK; * payment API client; * messaging client; * GraphQL client; * REST client; * email provider client; * search engine client; * analytics client.; Він корисний, якщо: </div>
SDK як Client
Основні переважні аспекти:
Client — це програма, пристрій або частина системи, яка звертається до server, API або service для отримання даних чи виконання дії.;- показує UI;
- надсилає input;
- отримує готові інформаційні дані;
- має мало локальної логіки;
- залежить від server;
- часто простіший в адмініструванні.;
- що змінилося locally;
- що змінилося на server;
- які зміни конфліктують;
- що робити з offline edits;
- як уникнути duplicates;
- як обробити retries;
- як показати user feedback;
- як зберегти data integrity.; * завантажувати HTML;
- виконувати JavaScript;
- показувати CSS;
- надсилати forms;
- робити API requests;
- зберігати cookies;
- працювати з local storage;
- відкривати WebSocket connection;
- кешувати assets;
- відображати UI.;== Offline Client ==
Retry корисний при:
Client і Accessibility
Основна ідея: client — це сторона, яка ініціює запит і просить server або service щось зробити чи повернути інформаційні дані.; як ілюстрація: </syntaxhighlight>
API integration
Приклад checklist для Client
- маршрутизує requests;
- перевіряє authentication;
- застосовує rate limits;
- агрегує responses;
- робить logging;
- приховує internal services;
- керує versions;
- застосовує security policies.;
HTTP client — client, який надсилає HTTP requests.; завдяки наявності Client library — бібліотека, яка користувачі можуть application звертатися до service або API.; }
- надсилання request;
- отримання response;
- показ даних користувачу;
- обробку user input;
- local validation;
- caching;
- session management;
- authentication flow;
- error handling;
- retry logic;
- offline mode у частині сценаріїв;
- UI або command interface.; * API clients;
- mobile apps;
- backend-to-backend calls;
- CLI tools;
- database clients;
- external integrations.; * closed;
- open;
- half-open.; }
</syntaxhighlight> Практична роль: checklist сприяє зробити client не тільки красивим, а й надійним, безпечним і зручним.; Особливо, якщо кілька пристроїв змінюють ті самі інформаційні дані.; User натискає "Save"
Mobile client показує баланс, надсилає payment request, отримує підтвердження від server і показує notification.; Критично: client не має збирати або зберігати більше даних, ніж потрібно для реальної функції.;- public API key із обмеженнями;
- publishable key для payment provider;
- client id для OAuth;
- non-secret configuration.; * authentication;
- request creation;
- headers setup;
- serialization;
- response parsing;
- error handling;
- retries;
- rate limit handling;
- pagination;
- logging;
- timeout management.;
- stale data;
- privacy issues;
- cache invalidation;
- показ старих permissions;
- sensitive data in cache;
- storage limits.; переважні аспекти:
переважні аспекти Client-Server поділу
Network client — програма, яка підключається до network service.;== Mock Client == істотно: thick client не означає “поганий”.; API client має змогу бути: Цікавий факт: у multiplayer game client має змогу “вгадувати” короткостроковий рух, щоб гра виглядала плавно, поки server підтверджує справжній state.; * resources;
- HTTP methods;
- status codes;
- JSON;
- headers;
- pagination;
- filtering;
- authentication;
- errors.; * notes app;
- mobile maps;
- email client;
- field service app;
- document editor;
- offline-first web app.; Проста аналогія: thin client — це пульт керування, а основна робота відбувається десь на server.; Підказка: щоб зрозуміти client у системі, запитайте: хто ініціює request і хто чекає response?; headers: {
- chats;
- live dashboards;
- multiplayer games;
- notifications;
- collaborative editing;
- trading platforms;
- real-time monitoring;
- live sports updates.; PATCH /profile
- method;
- URL;
- headers;
- body;
- query parameters;
- cookies;
- authentication token;
- content type;
- user agent;
- request id.; !;== Client State ==
- banking app;
- delivery app;
- social app;
- fitness app;
- messenger;
- mobile game;
- education app.; Server зберігає зміни
Version важлива для:
Sync або синхронізація — бізнес-процес узгодження client-side даних із server.; істотно: client library має оновлюватися разом із API.; if (!response.ok) {
- browser;
- curl;
- Postman;
- Insomnia;
- Fetch API;
- Axios;
- Requests у Python;
- OkHttp;
- Java HttpClient;
- Go `net/http`;
- .NET HttpClient.; Практична роль: хороший client не без ускладнень падає при помилці, а сприяє користувачу зрозуміти, що робити далі.;</syntaxhighlight>
Client Library
Приклади сценаріїв використання
Чи є собою backend authorization?; * errors;
- crashes;
- failed requests;
- performance metrics;
- user environment;
- app version;
- device type;
- browser version;
- request ids;
- feature flags.; Content-Type: application/json
throw new Error(`Request failed: ${response.status}`);
Цікавий момент: сучасний browser — це вже не без ускладнень “переглядач сторінок”, а потужна runtime-платформа для web applications.; Типовий приклад: const user = await api.users.get("123"); Client має власні ризики:
Contract testing перевіряє, що client і server однаково розуміють API contract.;
MobileApp iOS 2.8.1
Приклади:
});
</syntaxhighlight>
<syntaxhighlight lang="typescript"> Приклади:Client часто бере участь в authentication flow.; * У web security усе, що відправлено на client, вважається видимим.; Поняття Важливі фактори:
Приклади:
- Server
- Client-Server Architecture
- Frontend
- Backend
- API
- HTTP
- REST
- GraphQL
- WebSocket
- Browser
- Mobile Application
- Desktop Application
- SDK
- CLI
- Authentication
- Authorization
- Caching
- Offline Mode
- API Gateway
- Backend for Frontend
- Microservices
- Network Programming
- Application Security
- UX
- Testing
- Документація
<syntaxhighlight lang="text">
- Client
- Клієнт
- Software Client
- Client-Server
- Client-Server Architecture
- Web Client
- API Client
- HTTP Client
- Frontend Client
- Mobile Client
- Desktop Client
- Thin Client
- Thick Client
- Server
- Request
- Response
- Browser
- SDK
- Network Client
- Application Client
- Authentication
- Authorization
- Caching
- Документація