{"openapi":"3.1.0","info":{"title":"Rebrain QA load test API","description":"Учебное приложение для нагрузочного тестирования (JMeter). Методы отличаются профилем нагрузки: чтение, запись, поиск (скан), CPU (hash), медленный бэкенд (report). Протестируйте все методы с разным количеством пользователей/запросов и объясните результаты.","version":"2.0"},"paths":{"/api/v1/health":{"get":{"tags":["service"],"summary":"Проверка доступности","operationId":"health_api_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/stats":{"get":{"tags":["service"],"summary":"Счётчики текущего воркера","operationId":"stats_api_v1_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/items":{"get":{"tags":["items"],"summary":"Список (пагинация)","operationId":"list_items_api_v1_items_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":100000,"minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Item"},"title":"Response List Items Api V1 Items Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["items"],"summary":"Создать","operationId":"create_item_api_v1_items_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ItemIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Item"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/items/{item_id}":{"get":{"tags":["items"],"summary":"Получить по id","operationId":"get_item_api_v1_items__item_id__get","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"integer","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Item"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["items"],"summary":"Изменить","operationId":"update_item_api_v1_items__item_id__put","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"integer","title":"Item Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ItemIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Item"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["items"],"summary":"Удалить","operationId":"delete_item_api_v1_items__item_id__delete","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"integer","title":"Item Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/search":{"get":{"tags":["items"],"summary":"Поиск по подстроке в name/description (полный скан)","operationId":"search_api_v1_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":50,"title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Item"},"title":"Response Search Api V1 Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hash":{"post":{"tags":["compute"],"summary":"CPU-нагрузка: PBKDF2-SHA256 от data","operationId":"make_hash_api_v1_hash_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HashIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HashOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/report":{"get":{"tags":["compute"],"summary":"Медленный бэкенд: ответ через 100-500 мс","operationId":"report_api_v1_report_get","parameters":[{"name":"items","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Items"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HashIn":{"properties":{"data":{"type":"string","maxLength":1000,"title":"Data","examples":["rebrain"]},"rounds":{"type":"integer","maximum":200000.0,"minimum":1.0,"title":"Rounds","description":"Итерации PBKDF2 (1..200000)","default":10000}},"type":"object","required":["data"],"title":"HashIn"},"HashOut":{"properties":{"hash":{"type":"string","title":"Hash"},"rounds":{"type":"integer","title":"Rounds"},"elapsed_ms":{"type":"number","title":"Elapsed Ms"}},"type":"object","required":["hash","rounds","elapsed_ms"],"title":"HashOut"},"Item":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","examples":["foxtrot-1"]},"description":{"type":"string","maxLength":1000,"title":"Description","default":"","examples":["some text"]},"price":{"type":"number","maximum":1000000.0,"minimum":0.0,"title":"Price","default":0,"examples":[9.99]},"id":{"type":"integer","title":"Id"},"created_at":{"type":"number","title":"Created At"}},"type":"object","required":["name","id","created_at"],"title":"Item"},"ItemIn":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","examples":["foxtrot-1"]},"description":{"type":"string","maxLength":1000,"title":"Description","default":"","examples":["some text"]},"price":{"type":"number","maximum":1000000.0,"minimum":0.0,"title":"Price","default":0,"examples":[9.99]}},"type":"object","required":["name"],"title":"ItemIn"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}