За последний год я говорил об API *миллионы раз.
Множество отзывов и вопросов возникло, когда я рассказал о сериализации как о « добавление уровня представления к вашим данным ".
MSDN говорит это так:
Сериализация — это процесс преобразования объекта в поток байтов для его сохранения или передачи в память, базу данных или файл.Разработчики PHP часто рассматривают процесс сериализации как использование функции.Основная цель — сохранить состояние объекта, чтобы иметь возможность восстановить его в случае необходимости.
Обратный процесс называется десериализацией.
сериализовать ().
Да, это одна из форм сериализации, но она не единственная, которая существует. Другой распространенный подход к сериализации данных — использование функции json_encode ().
Сегодня современные платформы автоматически преобразуют любой массив, возвращаемый методом контроллера, в JSON, то есть вам даже не нужно вызывать json_encode () самостоятельно.
Эта функция довольно удобна, но если вы создаете HTTP API ( AJAX/RESTful/Гипермедиа ), то вам нужно быть более точным в том, что вы возвращаете.
Наиболее частыми нарушениями являются следующие:
Извините за упрощенный код, но вот модель мы получаем( возможно с помощью ORM ) и вернуть результат напрямую.<Эphp class PlaceController extends CoreController { public function show($id) { return Place::find($id); } }
Это кажется довольно невинным действием, но оно приводит к целому ряду проблем.
Не скрываться
Вы добавляете все поля к выходному результату при выполнении метода API. Если это внутренний API, то это может быть хорошо, но если эта информация будет распространяться повсюду в браузере или каким-то образом выйдет за пределы мобильного устройства, тогда вас действительно ждут плохие времена.Тривиальный пример — пароли пользователей.
Конечно, данные зашифрованы, но вы явно не хотите, чтобы они попали в чужие руки.
Чуть менее заметные вещи — токены сброса пароля, утечка которых может привести к взлому пользователей.
Но проблема может быть более скрытой.
В примере с Место , конфиденциальная информация может утечь из вашей компании, когда вас попросят добавить контакт. электронная почта , предназначен только для внутреннего использования.
Если вы потратили месяцы на сбор этих местоположений и установили ряд уникальных контактов, вы не хотите, чтобы все данные были переданы потенциальным конкурентам.
Да, многие ORM позволяют задавать параметры" скрытый " И " видимый " свойства в черный или белый список, но с течением времени вероятность сохранения всех потенциально скрытых значений сводится к нулю, особенно если у вас есть младший сотрудник, не знающий, что одно из этих полей должно быть скрыто по умолчанию, и усталость рецензента кода.
может позволить проблеме осознаться во время напряженного дня.
Например, фрактал Это библиотека сериализации PHP, которую я создал для сериализации моих приложений API. Вот простой пример: <Эphp
use League\Fractal\Manager;
use League\Fractal\Resource\Collection;
// Create a top level instance somewhere
$fractal = new Manager();
// Ask the ORM for 10 books
$books = Book::take(10)->get();
// Turn this collection
$resource = new Collection($books, function(array $book) {
return [
'id' => (int) $book->id,
'title' => $book->title,
'year' => (int) $book->yr,
'author' => [
Теги: #php #serialize #@Output() #formatmessage #fractal #Разработка веб-сайтов #php #Laravel
-
Чем Опасен Венчурный Капитал?
19 Oct, 24 -
Эльбрус: Из Прошлого В Будущее
19 Oct, 24 -
Вы Работаете С Adwords?
19 Oct, 24 -
Linux С Нуля 6.4
19 Oct, 24 -
Кремлевская Паутина
19 Oct, 24