-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
a3ca228
commit 7fef88a
Showing
13 changed files
with
174 additions
and
97 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,70 @@ | ||
# PPLBandage Backend | ||
[![Made with Prisma](https://made-with.prisma.io/indigo.svg)](https://prisma.io) | ||
![Lines Count](https://img.shields.io/endpoint?url=https%3A%2F%2Fghloc.vercel.app%2Fapi%2FPPLBandage%2FPPLBandage_Backend%2Fbadge%3Ffilter%3D.ts%24%2C.tsx%24%2C.css%24) | ||
[![Made for pepeland](https://andcool.ru/static/badges/made-for-ppl.svg)](https://pepeland.net) | ||
<p align="left"> | ||
<img src="https://made-with.prisma.io/indigo.svg" alt='prisma'></img> | ||
<img src="https://img.shields.io/endpoint?url=https%3A%2F%2Fghloc.vercel.app%2Fapi%2FPPLBandage%2FPPLBandage_Backend%2Fbadge%3Ffilter%3D.ts%24%2C.tsx%24%2C.css%24" alt='prisma'></img> | ||
<img src="https://andcool.ru/static/badges/made-for-ppl.svg" alt='pepeland'></img> | ||
</p> | ||
|
||
На данный момент документация к публичному API сайта недоступна. | ||
## Оглавление | ||
- [Base URL](#base-url) | ||
- [Ограничения по частоте запросов](#ограничения-по-частоте-запросов) | ||
- [Ошибки](#ошибки) | ||
- [Аутентификация](#аутентификация) | ||
- Документация к API | ||
- - [Корневые эндпоинты API](/docs/mainRoute.md) | ||
|
||
## Введение | ||
**API PPLBandage — это RestFul API, позволяющий приложениям взаимодействовать с серверами и базой данных проекта.** | ||
|
||
## Base URL | ||
`https://pplbandage.ru/api` | ||
|
||
## Ограничения по частоте запросов | ||
Глобальное ограничение на все эндпоинты: `150rpm`, однако оно может варьироваться в зависимости от конечного эндпоинта. | ||
| Эндпоинт | Ограничение по частоте запросов | | ||
| ---------------------------------------------------- | ------------------------------- | | ||
| `GET /api/ping` | Нет | | ||
| `GET /api/user/me/connections/minecraft/cache/purge` | `5rpm` | | ||
| `POST /api/workshop` | `5rpm` | | ||
| `GET /api/workshop/:id` | Нет | | ||
| `GET /api/workshop/:id/info` | Нет | | ||
Отсутствие ограничения по количеству запросов на эндпоинтах означает, что они являются закрытыми и для доступа к ним нужен специальный ключ. Об этом подробнее в описании эндпоинтов. | ||
|
||
## Ошибки | ||
Всего может возникнуть несколько типов ошибок: | ||
### Ошибки валидации | ||
Ошибки валидации могут возникнуть, если в тело запроса или query параметры было передано неверное значение. | ||
```json | ||
{ | ||
"message": [ | ||
"Массив ошибок валидации" | ||
], | ||
"error": "Описание кода ошибки", | ||
"statusCode": 400 | ||
} | ||
``` | ||
|
||
### Общие ошибки | ||
Общие ошибки могут возникнуть во всех остальных случаях, например, если пользователь не авторизован. | ||
```json | ||
{ | ||
"status": "error", | ||
"message": "UNAUTHORIZED", | ||
"statusCode": 401 | ||
} | ||
``` | ||
Так же в ошибках может быть поле `message_ru`, содержащее описание ошибки на русском. | ||
|
||
## Аутентификация | ||
Аутентификация происходит через **токены сессии**. | ||
### Описание процесса аутентификации | ||
Токены сессии должны передаваться в cookies запроса по ключу `sessionId`. | ||
При создании запроса к API он проверяет валидность токена, время жизни которого равно `14 дням` или двум неделям. Если со времени создания токена прошло более половины от его времени жизни, то бекенд обновляет его и отправляет клиенту в `Setcookie` хедере. | ||
> [!NOTE] | ||
> Обычно, все эндпоинты, требующие строгой аутентификации всегда отправляют `Setcookie` хедер, содержащий актуальный в данный момент токен сессии. В случае, когда токен был обновлён, он так же отправляется в хедерах. Клиенты должны при каждом запросе устанавливать актуальный токен из запроса. | ||
> [!WARNING] | ||
> Бекенд **не поддерживает** выполнение конкурентных запросов при обновлении токена. Клиенты должны сами позаботиться, чтобы запросы, подразумевающие обновление токена не выполнялись параллельно. В ином случае есть риск потерять текущую сессию. | ||
Если время жизни токена закончилось, бекенд вернёт HTTP код `401`. | ||
Все сессии связываются с fingerprint'ом текущего клиента, который представлен `User-Agent` хедером. Если запрос делается с другого `User-Agent` и по этому же токену, то он автоматически удаляется, возвращая HTTP код `401`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
# Корневые эндпоинты API | ||
**Здесь располагаются все эндпоинты, являющиеся общими и не относящиеся ни к одному из частей бекенда.** | ||
|
||
|
||
## `GET /api` | ||
Основной эндпоинт API, делает redirect с кодом `308` в корень URL (`/`). | ||
|
||
## `GET /ping` | ||
Делает ping запрос на сервер. Не имеет ограничений по частоте запросов. Максимально быстро возвращает ответ от сервера с кодом `200` | ||
|
||
### Тело ответа | ||
```json | ||
{ | ||
"statusCode": 200, | ||
"message": "pong" | ||
} | ||
``` | ||
|
||
## `GET /sitemap.xml` | ||
`Content-Type: text/xml` | ||
Возвращает актуальную карту сайта в формате `xml` для индекса поисковых систем. Содержит основные страницы сайта, а так же все публичные повязки и профили авторов. | ||
|
||
### Пример карты сайта | ||
```xml | ||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> | ||
<url> | ||
<loc>https://pplbandage.ru/</loc> | ||
<priority>1</priority> | ||
</url> | ||
<url> | ||
<loc>https://pplbandage.ru/workshop</loc> | ||
<priority>0.8</priority> | ||
</url> | ||
</urlset> | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.