рдкреНрд░рд╢рд┐рдХреНрд╖реБ рд╡рд╛рд╕реНрдпрд╛ рдФрд░ рдЙрдирдХреА рдХрд╣рд╛рдирд┐рдпрд╛рдБ idempotency рдПрдкреАрдЖрдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рдмреЗрд░реЛрдЬрдЧрд╛рд░реА - рдпрд╣ рдЬрдЯрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИ, рд╡реЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрди рд╕рднреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред


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


рдЫрд╡рд┐


рдПрдкреАрдЖрдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


API . API POST /v1/orders:


{
  "from": ", .   822",
  "to": " "
}

API , : ? , , . API GET /v1/orders:


{
  "orders": [
    {
      "id": 1,
      "from": ", .   822",
      "to": " "
    }
  ]
}

API :


  1. GET /v1/orders, , UI ;
  2. ┬л ┬╗ POST /v1/orders ;
  3. .

, , 2 . , . . , , . .



image


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


image


: . .



, ┬л ┬╗. , . , , .


, , . , : , . -: , . ┬л ┬╗ . , , ?


, , . : from to 5 . , 500. , , , : . , . , ┬л┬╗, , , . , .



, :


  1. ;
  2. UPDATE active_orders SET n=1 WHERE user_id={user_id} AND n=0;

  3. update 0 , HTTP 409;
  4. ;
  5. .

409 . , , . .



, : ┬л┬╗: ? : , , , ?! , . : 1 2? . , , .


image



, , . 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.


image



1 2 . :


  1. , , , ;
  2. , - , ;
  3. ;
  4. , 200;
  5. , , .

. , : , .


, , , . , AWS IdempotentParameterMismatch .


: , 5xx . , .


-


- .


1:


  1. , - , ;
  2. , , ;
  3. , GET /v1/orders, , ;
  4. , , ;
  5. , ;
  6. .

2:


  1. , , , ;
  2. , - : ;
  3. : , , , .

, :


  1. 1: . , , .
  2. 2: deleted_at=now() тАФ soft delete. .
  3. 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 :


  1. , id;
  2. , n ( , ), 200;
  3. 410 ┬л ┬╗. 404 410 , 404 , , . 410 , , .

.



B


, API : , API.


image


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.


image


: , ? , -, , -, API, .


- :


  1. ;
  2. , , ;
  3. API : API , .

: ? , . .



-, , API . , ?



SMS


: , - SMS. , .


image


SMS: , SMS . , . , ? , consumer . : , , .


: , SMS, email , : . , "at least once delivery" "at most once delivery". , , , .



, , API . , .


. API. . . . - API. - , , , API . , . , .


, , , ? , . : , . . .

Source: https://habr.com/ru/post/hi442762/


All Articles