1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/jupitergao-jserver

Клонировать/Скачать
README_CN.md 7 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 20.05.2025 21:50 ee786db

jserver

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" }

При запросе вам нужно знать:

  • Когда вы отправляете POST, PUT, PATCH или DELETE запросы, измененные данные автоматически сохраняются в data.json, при параллельных вызовах сохранение также безопасно.
  • Тело запроса должно быть допустимым JSON-объектом или одиночным значением (например, {"name": "Foobar"}, "test string", 83.01).
  • Уникальный идентификатор (по умолчанию id) не может быть изменен. Любые значения id в запросах PUT или PATCH игнорируются. Только значения id в запросах POST используются, дублирование id не допускается.
  • В запросах POST, PUT или PATCH заголовок должен указывать 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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/jupitergao-jserver.git
git@api.gitlife.ru:oschina-mirror/jupitergao-jserver.git
oschina-mirror
jupitergao-jserver
jupitergao-jserver
main