cinema.yml 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394
  1. openapi: 3.0.0
  2. info:
  3. title: АПИ для демо-экзамена по компетенции Разработка мобильных приложений
  4. version: 0.0.1
  5. description: |
  6. API для мобильного приложения "WS-Cinema".
  7. Перечень ошибок неполный, возможно получение от сервера незадокументированных ошибок.
  8. Для передачи токена необходимо использовать Header: **Authorization: Bearer {token}**
  9. Требования к email: email должен соответствовать паттерну **name@domenname.ru**, где имя и домен второго уровня могут состоять только из маленьких букв и цифр, домен верхнего уровня - только из маленьких букв. Длина домена верхнего уровня - не более 3х символов.
  10. **BASE URL**: http://cinema.kolei.ru
  11. **BASE URL** Для видео: http://cinema.kolei.ru/up/video/
  12. **BASE URL** Для изображений и аватаров: http://cinema.kolei.ru/up/images/
  13. servers:
  14. - url: http://cinema.kolei.ru
  15. tags:
  16. - name: auth
  17. description: Регистрация и авторизация (получение токена)
  18. - name: movie
  19. description: Информация о киноновинках
  20. - name: up
  21. description: Ресурсы
  22. - name: user
  23. description: Информация о пользователе
  24. paths:
  25. /auth/register:
  26. post:
  27. tags:
  28. - auth
  29. summary: Регистрация
  30. requestBody:
  31. required: true
  32. content:
  33. application/json:
  34. schema:
  35. type: object
  36. properties:
  37. email:
  38. type: string
  39. description: Email пользователя. Email должен соответствовать паттерну "name@domenname.ru", где имя и домен второго уровня могут состоять только из маленьких букв и цифр, домен верхнего уровня - только из маленьких букв. Длина домена верхнего уровня - не более 3х символов.
  40. example: kolei@yandex.ru
  41. password:
  42. type: string
  43. description: Пароль
  44. example: qwerty
  45. firstName:
  46. type: string
  47. description: Имя пользователя
  48. example: Евгений
  49. lastName:
  50. type: string
  51. description: Фамилия пользователя
  52. example: Колесников
  53. required:
  54. - email
  55. - password
  56. - firstName
  57. - lastName
  58. responses:
  59. '200':
  60. description: Успешная регистрация
  61. '400':
  62. description: Проблемы при регистрации
  63. /auth/login:
  64. post:
  65. tags:
  66. - auth
  67. summary: Аутентификация в системе
  68. requestBody:
  69. required: true
  70. content:
  71. application/json:
  72. schema:
  73. type: object
  74. properties:
  75. email:
  76. type: string
  77. description: Email пользователя. Email должен соответствовать паттерну "name@domenname.ru", где имя и домен второго уровня могут состоять только из маленьких букв и цифр, домен верхнего уровня - только из маленьких букв. Длина домена верхнего уровня - не более 3х символов.
  78. example: kolei@yandex.ru
  79. password:
  80. type: string
  81. description: Пароль
  82. example: qwerty
  83. required:
  84. - email
  85. - password
  86. responses:
  87. '200':
  88. description: Успешная аутентификация
  89. content:
  90. application/json:
  91. schema:
  92. type: object
  93. properties:
  94. token:
  95. type: integer
  96. description: Токен доступа к серверу
  97. example: 123456
  98. # links:
  99. # GetAuthToken:
  100. # parameters:
  101. # token: '$response.body#/token'
  102. '400':
  103. description: Проблема аутентификации
  104. /movies:
  105. get:
  106. tags:
  107. - movie
  108. summary: Получить список фильмов
  109. description: Список фильмов для отображения на главном экране
  110. parameters:
  111. - name: filter
  112. in: query
  113. description: Фильтр для запроса
  114. required: true
  115. schema:
  116. type: string
  117. default: new
  118. enum: [new, inTrend, forMe]
  119. responses:
  120. '200':
  121. description: Массив фильмов
  122. content:
  123. application/json:
  124. schema:
  125. $ref: '#/components/schemas/Movie'
  126. '400':
  127. description: Проблемы при запросе
  128. /user:
  129. get:
  130. tags:
  131. - user
  132. summary: Получить информацию о пользователе
  133. description: Необходимо передать header параметр авторизации типа Bearer
  134. security:
  135. - BearerAuth: []
  136. responses:
  137. '200':
  138. description: Данные пользователя
  139. content:
  140. application/json:
  141. schema:
  142. $ref: '#/components/schemas/User'
  143. '401':
  144. description: Неавторизированный доступ
  145. /user/avatar:
  146. post:
  147. tags:
  148. - user
  149. security:
  150. - BearerAuth: []
  151. summary: Загрузка фотографии
  152. description: Данный запрос принимает только изображения формата .jpg/.jpeg. Пустые изображения и невалидные изображения не разрешены
  153. requestBody:
  154. required: true
  155. content:
  156. multipart/form-data:
  157. schema:
  158. type: object
  159. properties:
  160. token:
  161. type: string
  162. format: string
  163. file:
  164. type: string
  165. format: binary
  166. encoding:
  167. file:
  168. contentType: image/jpg, image/jpeg
  169. responses:
  170. '200':
  171. description: Данные пользователя
  172. content:
  173. application/json:
  174. schema:
  175. $ref: '#/components/schemas/User'
  176. '401':
  177. description: Неавторизированный доступ
  178. /user/chats:
  179. get:
  180. tags:
  181. - user
  182. security:
  183. - BearerAuth: []
  184. summary: Список чатов, в которых учавствует данный пользователь
  185. description: Необходимо передать header параметр авторизации типа Bearer
  186. responses:
  187. '200':
  188. description: Массив информации о чатах пользователя
  189. content:
  190. application/json:
  191. schema:
  192. $ref: '#/components/schemas/Chat'
  193. '401':
  194. description: Неавторизованный доступ
  195. /chats/{chatId}/messages:
  196. get:
  197. tags:
  198. - user
  199. security:
  200. - BearerAuth: []
  201. summary: Список сообщений чата
  202. description: Необходимо передать header параметр авторизации типа Bearer
  203. parameters:
  204. - in: path
  205. name: chatId
  206. schema:
  207. type: integer
  208. required: true
  209. description: Id чата
  210. responses:
  211. '200':
  212. description: Массив сообщений чата
  213. content:
  214. application/json:
  215. schema:
  216. type: array
  217. items:
  218. $ref: '#/components/schemas/Message'
  219. '401':
  220. description: Неавторизированный доступ
  221. post:
  222. tags:
  223. - user
  224. security:
  225. - BearerAuth: []
  226. summary: Отправить сообщение в чат
  227. description: Необходимо передать header параметр авторизации типа Bearer
  228. parameters:
  229. - in: path
  230. name: chatId
  231. schema:
  232. type: integer
  233. required: true
  234. description: Id чата
  235. requestBody:
  236. required: true
  237. content:
  238. application/json:
  239. schema:
  240. type: object
  241. properties:
  242. text:
  243. type: string
  244. example: Текст сообщения
  245. responses:
  246. '200':
  247. description: Сообщение чата
  248. content:
  249. application/json:
  250. schema:
  251. $ref: '#/components/schemas/Message'
  252. '400':
  253. description: Проблемы при сохранении
  254. '401':
  255. description: Неавторизированный доступ
  256. /up/images/{imageName}:
  257. get:
  258. tags:
  259. - up
  260. summary: Получение картинки
  261. parameters:
  262. - in: path
  263. name: imageName
  264. schema:
  265. type: string
  266. required: true
  267. description: Название картинки (с расширением), полученное при запросе списка фильмов
  268. responses:
  269. '200':
  270. description: Файл картинки в формате .jpg
  271. content:
  272. image/jpg:
  273. schema:
  274. type: string
  275. format: binary
  276. '404':
  277. description: Картинка не найдена на сервере
  278. components:
  279. securitySchemes:
  280. BearerAuth:
  281. type: http
  282. scheme: bearer
  283. schemas:
  284. Movie:
  285. type: array
  286. items:
  287. type: object
  288. properties:
  289. movieId:
  290. type: string
  291. example: 1
  292. name:
  293. type: string
  294. example: Название фильма
  295. description:
  296. type: string
  297. example: Описание фильма
  298. age:
  299. type: string
  300. enum: ['0','6','12','16','18']
  301. description: Возрастные ограничения
  302. images:
  303. type: array
  304. items:
  305. type: string
  306. poster:
  307. type: string
  308. example: poster.png
  309. description: Название картинки постера
  310. tags:
  311. $ref: '#/components/schemas/Tag'
  312. required:
  313. - movieId
  314. Tag:
  315. type: array
  316. items:
  317. type: object
  318. properties:
  319. idTags:
  320. type: string
  321. example: 13
  322. tagName:
  323. type: string
  324. example: Комедия
  325. User:
  326. type: array
  327. items:
  328. type: object
  329. properties:
  330. userId:
  331. type: string
  332. example: 27
  333. firstName:
  334. type: string
  335. example: Евгений
  336. lastName:
  337. type: string
  338. example: Колесников
  339. email:
  340. type: string
  341. example: kolei@yandex.ru
  342. avatar:
  343. type: string
  344. example: ekolesnikov.jpg
  345. description: Название файла
  346. Chat:
  347. type: array
  348. items:
  349. type: object
  350. properties:
  351. name:
  352. type: string
  353. description: Название чата
  354. example: Дюна
  355. chatId:
  356. type: string
  357. example: 1
  358. Message:
  359. type: object
  360. properties:
  361. chatId:
  362. type: string
  363. example: 1
  364. messageId:
  365. type: string
  366. example: 1
  367. creationDateTime:
  368. type: string
  369. format: date
  370. example: 2022-11-07 10:30
  371. description: Дата и время добавления сообщения в формате YYYY-MM-DD hh:mm
  372. firstName:
  373. type: string
  374. example: Евгений
  375. lastName:
  376. type: string
  377. example: Колесников
  378. avatar:
  379. type: string
  380. example: somename.jpg
  381. text:
  382. type: string
  383. example: А мне не понравился последний сезон. Позор создателям.