Rust-написанный JSON-интерфейс и сервер статических файлов
Вдохновлен typicode, написанным на Node.js json-server
30 секунд без кода для реализации полнофункционального REST-интерфейса (на самом деле)
Инструмент для быстрого прототипирования и тестирования, созданный для фронтенд-разработчиков.
Установка JServer
cargo build --release
cp target/release/jserver /usr/bin/
Создайте файл data.json
и подготовьте некоторые данные
{
"posts": [
{ "id": 1, "title": "jserver", "author": "jupiter.gao" }
],
"comments": [
{ "id": 1, "body": "some comment" }
],
"profile": { "name": "jupiter" },
"homepage": "https://apicenter.com.cn"
}
Запустите JServer
jserver
Теперь вы можете напрямую обращаться к http://localhost:2901/api/posts/1 и получать данные
{ "id": 1, "title": "jserver", "author": "jupiter.gao" }
При запросе вам нужно знать:
data.json
, при параллельных вызовах сохранение также безопасно.{"name": "Foobar"}
, "test string"
, 83.01
).id
) не может быть изменен. Любые значения id
в запросах PUT или PATCH игнорируются. Только значения id
в запросах POST используются, дублирование id
не допускается.Content-Type: application/json
.## МаршрутыНа основе предыдущего файла data.json
можно использовать следующие маршруты для запросов интерфейса.
GET /api/posts
GET /api/posts/1
POST /api/posts
PUT /api/posts/1
PATCH /api/posts/1
DELETE /api/posts/1
GET /api/profile
POST /api/profile
PUT /api/profile
PATCH /api/profile
GET /api/posts?title=jserver
GET /api/posts?id=1
Для чисел можно использовать следующие суффиксы _lt
, _lte
, _gt
, _gte
, которые соответственно обозначают <
, <=
, >
, >=
.
Для строк использование _like
обозначает включение подстроки, _nlike
обозначает исключение подстроки.
Для массивов использование _contains
обозначает включение элемента, _ncontains
обозначает исключение элемента.
Для чисел, строк и булевых значений использование _ne
обозначает !=
.
Для полей использование _exists
обозначает наличие, _nexists
обозначает отсутствие.
GET /api/posts?title_like=server
GET /api/posts?id_gt=1&id_lt=3&title_exists=true
Используйте необязательные параметры _page
и необязательные параметры _size
для пагинации возвращаемых данных.
GET /api/posts?_page=7
GET /api/posts?_page=7&_size=20
GET /api/posts?_size=100
По умолчанию возвращается 20 элементов на страницу, нумерация страниц начинается с 1 (0 обрабатывается как 1).
Добавьте параметры _sort
и _order
для сортировки.
GET /api/posts?_sort=views&_order=asc
```Для сортировки по нескольким полям используйте следующий формат запроса:
GET /api/posts?_sort=user,views&_order=desc,asc
### Срез
Добавьте параметры `_start` и (`_end` или `_limit`)
GET /api/posts?_start=20&_end=30 GET /api/posts?_start=20&_limit=10
В заголовке ответа содержится `X-Total-Count`, указывающий общее количество результатов.
### База данных
GET /db
### Загрузка файлов
Сервер поддерживает загрузку файлов, и к ним можно получить доступ через статический файловый сервер, описанный ниже.
POST /upload
Тело запроса должно быть в формате `multipart/form-data`, имя поля файла — `file`.
Тело ответа — JSON-массив, элементы которого содержат поля `name`, `path` и `size`.
### Статический файловый сервер
Вы можете использовать JServer для предоставления статических файлов, таких как HTML, JS и CSS, просто разместив их в директории `./public`
или используя параметр командной строки `--public-path` для указания другой директории статических файлов.
```bash
mkdir public
echo 'hello world' > public/index.html
jserver
jserver --public-path ./some-other-dir
Использование: jserver [опции]
```Опции:
-b, --bind-address <адрес_сервиса> [по умолчанию: 0.0.0.0:2901]
-d, --db-path <json_файл_данных> [по умолчанию: ./data.json]
-p, --public-path <путь_к_статическим_файлам> [по умолчанию: ./public]
-i, --id <поле_для_уникального_идентификатора> [по умолчанию: id]
-m, --max-body-limit-m <максимальный_размер_запроса_в_МБ> [по умолчанию: 100]
--debug
-h, --help показать справку
-V, --version показать номер версии
```## Лицензия
Apache License 2.0
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )