Всем доброго времени!
Стоит задача написать относительно простое API для мобильного приложения (что-то типа каталога). До этого всё кое-как работало на самописном движке, но вскоре стало понятно, что расширять его будет весьма проблематично и затратно (по причине костылей и квадратных колёс, ну, это не суть важно)
Так вот, было принято решение написать API на фреймворке (чтобы потом в будущем можно было без проблем сделать web-версию). Выбор пал на Yii2.
Опыт работы с фреймворком у меня весьма посредственный - пара тестовых проектов и понимание основных принципов того, как там всё работает и устроено, но не более.
Исходя из документации я понял, что в Yii есть поддержка RESTful Api и его реализация не так сложна… Но вот вся проблема в том, что АПИ нужно реализовать так, чтобы было минимум отличий от предыдущей недоверсии. Вплоть до "одинаковости" запросов и ответов. Всё это для того, чтобы затрагивать код клиентской части как можно меньше… А если реализовывать на RESTful, то менять придётся всё.
В итоге получается, что нужно реализовать свой API-движок, если это так можно назвать и работать уже с ним.
И… Я просто не знаю как это сделать на Yii. Сделать-то конечно смогу, но не зная тонкостей работы с фреймворком начну изобретать кучу велосипедов, делать то, что во фреймворке уже теоретически есть.
Вид JSON ответа примерно такой:
{
"response":{
// Тут результат работы
},
"status":{
"code":0,
"message":"Success"
}
}
Т.е в моём текущем понимании это всё должно работать примерно так:
Клиент делает запрос на server.com/api/user/list (server.com/?r=api/user/list).
Далее в методе actionList ведётся работа с моделью, которая возвращает данные и БД, далее всё это подставляется в "шаблон" ответа, в объект response. Т.е. в идеале после этого запроса ответ должен быть таким:
{
"response":{
"list":[
{
"id":1,
"name":"Петя"
},
{
"id":2,
"name":"Вася"
}
]
},
"status":{
"code":0,
"message":"success"
}
}
Вроде всё просто и понятно, но вот тут у меня возник вопрос: Как реализовать работу с шаблоном, где и что нужно создавать? Я так понял для всего этого нужно написать класс, который будет всем этим заниматься… Создать-то не проблема, но хочется использовать функционал фреймворка по полной
Извиняюсь за свою тупизну и примитивные вопросы, но гугл даёт инфу только по REST апи…
Всем бобра!