savostin
@savostin
Еще один программист

Архитектура веб-приложения?

Прошу помощи зала в выборе архитектуры приложения.

Чего хочется: JSON API.

Есть два типа запросов:

1. параметризированные, результат которых — массивы структурированных данных (как бы чтение)

2. принимающие структурированные данные (как бы запись)



Хочется как-то унифицировать, т.е. не хотелось бы делать разные способы передачи данных (скажем для первого варианта — это параметры URI, а для второго — JSON POST). Т.е. хотелось бы, чтобы оба типа запросов принимались как JSON POST. Так и понятнее и однообразнее.



Однако возникает проблема с кешированием. Запросы первого типа отдают данные, которые редко меняются. Хотелось бы не тащить их из базы, а кешировать. Ника не могу найти можно ли как-то кешировать JSON POST запросы скажем к nginx'у. Понятно, что запросы второго типа кешировать не надо.



Сейчас сделано так: всё отправляется JSON POST, принимается php, парстися JSON запрос, проверяются все параметры, определяется тип запроса, по параметрам создается хэш кэша, проверяется есть ли результаты в кэше, отдается кэш или запрашивается база. Хотелось бы обойтись как-то без участия php-fpm.
  • Вопрос задан
  • 4216 просмотров
Пригласить эксперта
Ответы на вопрос 3
VBart
@VBart
Используйте REST API, это и будет унификация и стандартизация.
GET, POST, PUT, DELETE
Ответ написан
Wott
@Wott
не совсем понятно зачем нужен имено JSON POST если все параметры умещаются в URI, то есть обьектов нет или сериализация примитивная. Я бы просто сделал GET и POST.

Единообразие GET и POST делать через $_REQUEST, ежели все таки JSON POST то просто $_GET поэлементно запизиваем в обьект, как если бы он был из JSON POST, и дальше его парсим.

Похоже про кэширование не совсем корректно написано в вопросе. nginx отлично кэширует GET, надо просто ключом поставить что то типа
proxy_cache_key "$request_method|$http_if_modified_since|$http_if_none_match|$host|$request_uri";
а POST как раз некэшируется и вроде как и не надо. Так что проблема вроде как решается автоматом.
Ответ написан
donnerjack13589
@donnerjack13589
io.js core developer
Можно использовать node.js и redis, кэшировать в node.js
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы