рдмреЗрд░реЛрдЬрдЧрд╛рд░реА - рдпрд╣ рдЬрдЯрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИ, рд╡реЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрди рд╕рднреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдореЗрд░рд╛ рдирд╛рдо рдбреЗрдирд┐рд╕ рдЗрд╕реЗрд╡ рд╣реИ, рдФрд░ рдореИрдВ Yandex.Taxi рдкрд░ рдмреИрдХрдПрдВрдб рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд░рддрд╛ рд╣реВрдВред рдЖрдЬ рдореИрдВ Habr рдкрд╛рдардХреЛрдВ рдХреЗ рд╕рд╛рде рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рд╕рд╛рдЭрд╛ рдХрд░реВрдБрдЧрд╛ рдЬреЛ рдЕрдЧрд░ рдЖрдк рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рд╕рд┐рд╕реНрдЯрдореЛрдВ рдХреА рдмреЗрд░реБрдЦреА рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ рддреЛ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрдВрдЯрд░реНрди рд╡рд╛рд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╛рд▓реНрдкрдирд┐рдХ рдХрд╣рд╛рдирд┐рдпреЛрдВ рдХреЗ рдкреНрд░рд╛рд░реВрдк рдХреЛ рдЪреБрдирд╛, рдЬреЛ рдЕрднреА рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕реАрдЦ рд░рд╣реА рд╣реИрдВред рдпрд╣ рдЕрдзрд┐рдХ рджреГрд╢реНрдп рдФрд░ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВред

рдПрдкреАрдЖрдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
API . API POST /v1/orders
:
{
"from": ", . 822",
"to": " "
}
API , : ? , , . API GET /v1/orders
:
{
"orders": [
{
"id": 1,
"from": ", . 822",
"to": " "
}
]
}
API :
GET /v1/orders
, , UI ;- ┬л ┬╗
POST /v1/orders
; - .
, , 2 . , . . , , . .

8 : , , . , , VPN , . , . : 7 . , , -. : ┬л ┬╗ , , , , , , .

: . .
, ┬л ┬╗. , . , , .
, , . , : , . -: , . ┬л ┬╗ . , , ?
, , . : from to 5 . , 500. , , , : . , . , ┬л┬╗, , , . , .
, :
- ;
UPDATE active_orders SET n=1 WHERE user_id={user_id} AND n=0;
update
0 , HTTP 409;- ;
- .
409 . , , . .
, : ┬л┬╗: ? : , , , ?! , . : 1 2? . , , .

, , . API, . : . , API тАФ , API 200, 400. API ( , ), .
, HTTP GET, PUT, DELETE , POST PATCH . , GET , POST . , , , - POST PATCH , GET PUT .
idempotency key API.
. (POST) Idempotency-Key , API. UUID V4. Stripe (POST) Idempotency-Key , API. 24. client tokens AWS.
POST /v1/orders idempotency_key, :
{
"from": ", . 822",
"to": " ",
"idempotency_key": "786706b8-ed80-443a-80f6-ea1fa8cc1b51"
}
UUID v4 . . , . , 409. : 409, 200, , 409.

1 2 . :
- , , , ;
- , - , ;
- ;
- , 200;
- , , .
. , : , .
, , , . , AWS IdempotentParameterMismatch .
: , 5xx . , .
-
- .
1:
- , - , ;
- , , ;
- , GET /v1/orders, , ;
- , , ;
- , ;
- .
2:
- , , , ;
- , - : ;
- : , , , .
, :
- 1: . , , .
- 2: deleted_at=now() тАФ soft delete. .
- 3: , , 24.
: . API GET /v1/orders
. , . If-Match , . (, , ). , . () , , ┬л , ┬╗. , . , ( ), : , , fingerprint
Google Cloud API .
, API . .
, API 404. , API .
DELETE /v1/orders/:id. . soft delete ( deleted_at=now()) .
, . , , 404: . ┬л ┬╗.
, API , , тАФ .
200 , DELETE . . soft delete API :
- , id;
- , n ( , ), 200;
- 410 ┬л ┬╗. 404 410 , 404 , , . 410 , , .
.
B
, API : , API.

B. PATCH /v1/orders/:id
:
{
"to": " "
}
update
:
UPDATE orders SET to={to} WHERE id={id}
тАФ . , / , .
API : , . API , . - . API
UPDATE user_counters SET orders_finished = {orders_finished+1} WHERE user_id={user_id}
, API , 1.

: , ? , -, , -, API, .
- :
- ;
- , , ;
- API : API , .
: ? , . .
-, , API . , ?
SMS
: , - SMS. , .

SMS: , SMS . , . , ? , consumer . : , , .
: , SMS, email , : . , "at least once delivery" "at most once delivery". , , , .
, , API . , .
. API. . . . - API. - , , , API . , . , .
, , , ? , . : , . . .