API php, Как правильно отдать данные?

Всем привет! Делаю API и вот столкнулся с такой проблемой. Всеми данными внутри приложение удобно оперировать объектами и классами. Допустим, если это пост в блоге пользователя - это класс
class BlogPost extends Post{
   // ......
}

Там все данные о посте, название, текст, attachments, информация о пользователе загрузившем его и т.д.

Но ведь отдавать эти данные мне нужно через JSON, а значит преобразовывать объекты нужно в массив.
Я нашел в сети подобные решения qaru.site/questions/14775/convert-php-object-to-as...
Но у меня появилось еще больше вопросов...
1. Я что-то не так делал, раз у меня возникла такая ситуация?

Самый главный вопрос в том, что при работе с API, посылая запрос из внешнего приложения, есть возможность указывать необходимые поля в параметре fields. А значит просто преобразовав объект в массив - я получу пустые данные, которые, возможно, не запрашивались клиентом. Выходит, что просто преобразовать объект в массив - нельзя.

Может мне стоит создать в каждом подобном классе (BlogPost, GroupPost, User, Attachment и т.д.) метод, который будет отдавать массив данных согласно запрошенным полям? Т.е. должно получиться так, что сначала мы строим запрос, чтобы вытащить данные из базы согласно необходимым полям, а затем, при преобразовании в массив объекта, сновы проверяем нужные поля и преобразовываем только нужные нам параметры?

Пните плз в нужную сторону...
  • Вопрос задан
  • 532 просмотра
Пригласить эксперта
Ответы на вопрос 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Нужная сторона: Fractal.
Ответ написан
Комментировать
DieZz
@DieZz
Лучше всего имплементировать интерфейс JsonSerializable, например вот так
class BlogPost extends Post implements JsonSerializable {
    //...

   public function jsonSerialize() {
        return [
            'title' => $this->title,
            'attachments' => $this->attachments,
             ...
        ];
    }
}


дальше вы легко отправлять ответ:
return json_encode($blogPost);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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