Я хочу знать, есть ли лучшие методы использования Magento 2 в качестве решения для электронной коммерции без головы .
Типичная электронная коммерция в 2017 году - иметь многоканальное решение, которое включает
- Электронная коммерция
- CMS
- Multiplatform
- Интеграция системы уровня (ERP, ...)
Я хочу знать, как задействовать Magento 2 API с таким решением.
Мой подход:
Используйте другую среду внешнего интерфейса (например, угловую) для настольного / мобильного веб-приложения и мобильного приложения
Используйте Magento 2 API только для извлечения или взаимодействия с данными / действиями в области электронной коммерции.
Используйте CMS API только для извлечения данных CMS.
Pro: только API, все каналы
Минусы: ограничение по производительности / функциям / форматированию
Некоторые вопросы для этого подхода:
- Кто отвечает за форматирование данных, например, цены. Magento API и интерфейс веб-интерфейса?
- Кто отвечает за изменение размеров изображений продуктов и их кэширование? Потому что в нативном Magento 2 API нет системы изменения размера или кеша.
- Нужно ли создавать новый пользовательский изолированный API или расширять собственный для будущих целей обновления?
- Вы рекомендуете использовать дополнительный слой для объединения CMS и Magento API?
Я ценю, что вы поделились своим опытом.
Более того, я нашел такой подход: http://fbrnc.net/blog/2015/10/super-scaling-magento
Полезные ссылки:
- https://blogi.lamia.fi/verkkokaupat/headless-ecommerce/
- http://www.magetitans.it/headless-new-buzzword-magento-2-sander-mangel/
- https://www.youtube.com/watch?v=6OuzAtqtWRE
https://pantheon.io/blog/headless-websites-whats-big-deal-decoupled-architecture
https://creately.com/diagram/example-v2/ihbyjjkf/Example%20Headless%20Architecture
https://alankent.me/2016/12/14/headless-magento-and-extensions/
РЕДАКТИРОВАТЬ :
Я нашел хороший загрузчик для создания собственной логики кеша для вашего Magento 2 API: https://github.com/magespecialist/m2-MSP_APIEnhancer
РЕДАКТИРОВАТЬ: хороший проект с открытым исходным кодом для использования Magento 2 в качестве безголовой электронной коммерции с VueJS PWA: https://github.com/DivanteLtd/vue-storefront
РЕДАКТИРОВАТЬ: Официальные инструменты PWA Magento 2 на основе React: https://github.com/magento-research/pwa-studio
источник
Ответы:
Ответы на вопросы
Magento API обеспечивает доступ к данным и бизнес-логике . Форматирование данных / цен является частью логики представления , поэтому в этом случае у вас будет больше гибкости для представления информации так, как вы хотите (без необходимости делать это по-мадженто).
Например, вы можете использовать JavaScript для определения настроек локали и предоставления соответствующих данных. Проверьте следующее: navigator.language toLocaleString ()
Или же вы можете даже импортировать цены из Magento в стороннюю систему или в инструмент анализа данных, а форматирование цен в соответствии с форматом валюты только нарушит процесс импорта, пока вы не решите «конвертацию валюты».
Именно так. Как я уже говорил выше, Magento обеспечивает доступ к данным (без логики представления). Это зависит от вас, как вы будете его использовать.
Например, вы можете выбрать адаптивное изменение размера изображения http://adaptive-images.com/details.htm , чтобы вы могли легко использовать исходное изображение и делать все, что захотите.
Вы можете выбрать способ кэширования изображений, использовать сжатие с потерями или без потерь для уменьшения изображений и т. Д.
Я рекомендую вам сделать свой API, который будет использоваться для логики представления, и вы будете на 99,9% (я думаю) уверены, что на вас не повлияет будущее обновление Magento2 API.
Настоятельно рекомендуется. Но дополнительный слой не должен быть дополнительным приложением; это также может быть модуль Magento2. Хорошая вещь в этом заключается в том, что вы можете комбинировать это так, как хотите; Вы можете создать свой прокси-слой, используя любой язык / технологию, какую захотите.
Есть много подходов, которые вы можете использовать здесь. Я поделюсь своим мнением по этому поводу.
Мой подход к безголовым
Во- первых, я хотел бы разделить его на два слоя: прокси - слой и слой представления .
Прокси слой
Первое, что вы должны рассмотреть, это создать прокси-слой. За кулисами вы можете использовать Magento API, CMS API, ERP API, x API, что угодно ...
На уровне прокси вы можете использовать и организовывать данные так, как вам удобно. Здесь можно реализовать слой кэширования, а также дополнительные функции для форматирования данных, отслеживания клиентов, различных автоматизаций и т. Д. В общем, все, что вам нужно для легкого манипулирования на уровне представления.
Уровень прокси не должен быть закодирован в PHP; он может быть закодирован в Java, NodeJS, или вы даже можете использовать AWS API Gateway, AWS SQS и Lambda для предоставления целого уровня прокси или только его части.
Один из подходов, которые вы можете использовать, описан Фабрицио Бранкой по адресу http://fbrnc.net/blog/2015/10/super-scaling-magento.
Уровень представления
Уровень представления зависит от клиентской платформы; если вы собираетесь использовать его для мобильных приложений, то все ясно, как использовать прокси-API.
Для веб-приложения есть много возможностей. Вы можете использовать:
Это не по списку книг , я просто поделился несколькими комбинациями. На самом деле, ваше воображение является единственным пределом.
Последние мысли
Максимально используйте решение на основе javascript, поскольку оно может обеспечить лучшее взаимодействие с клиентом, меньшую полезную нагрузку при загрузке страниц, вы можете даже спекулятивно загружать данные, если можете предсказать следующие действия клиента.
НО, проблема с чисто javascript-решением - это SEO. Если все ваши данные загружаются через Ajax, Google, вероятно, не сможет их проанализировать.
Решение заключается в создании гибридного приложения, которое будет обслуживать всю HTML-страницу при первой загрузке, например, когда вы нажимаете / catalog / shoes. Для дальнейшей навигации по сайту вы можете использовать ajax для выборки только необходимых блоков.
Одним из подходов будет создание снимков вашей страницы, например, с помощью PhantomJS . Есть также несколько платных решений для этого, таких как:
источник
Я могу поделиться некоторыми взглядами на разработку безголовых проектов magento, так как моя компания создала 2 из них.
Мы решили использовать responsejs в качестве приложения внешнего интерфейса и связать его с серверным бэкэндом. API-вызовы к magento выполнялись узлом на стороне сервера. Это означало, что звонки в magento не отправлялись из браузера.
С точки зрения API это хорошо, но есть некоторые проблемы, с которыми мы столкнулись во время разработки. Конечные точки Magento2 иногда очень ограничены. По умолчанию обработчик конечных точек не позволяет вводить дополнительные данные в ответ, поскольку они не предоставляются
extension_attributes
каждому. С интерфейсом, написанным отдельно, это не очень хорошая новость. Мы много раз сталкивались с необходимостью добавить некоторые данные и не могли сделать это для конечной точки родного magento из-за отсутствияextension_attributes
. Эти экземпляры необходимы для того, чтобы либо переопределить конечную точку magento и предоставить нашему собственному интерфейсу дополнительные поля, либо создать нашу собственную конечную точку, расширяющую magento и изменяющую то, что нам нужно.Например, нам нужно было переопределить, так
/rest/V1/categories
как magento по умолчанию не добавляет URL-путь в дерево категорий./rest/V1/products
который должен был получать данные о продукте, был слишком ограничен для нас, так как нам нужно было использовать его для просмотра категорий, и мы хотели получить доступные фильтры в этом ответе.Еще одна проблема - отсутствующие конечные точки. Нам нужно было создать сообщения для отправки контактного электронного письма, хлебные крошки для категории, выборки данных цитаты из quoteId и несколько дополнительных для работы с конкретными элементами проекта. Вообще говоря, если в обычном Magento2-фронте вы создадите блок, извлекающий некоторую пользовательскую коллекцию, вам может понадобиться добавить конечную точку API.
Самой хитрой частью была проверка. Хотя он подготовлен для безголового режима, все же есть некоторые детали, которые требуют специальной настройки. Если вы используете PayPal, то обычно вы будете перенаправлены на сайт PayPal для оплаты с некоторым токеном. Для нас этот токен нужно получить отдельно, так как мы не следуем стандартному пути перенаправления. Аналогичный случай был с подключением Adyen, который требовал перенаправления после размещения заказа. Стандартная конечная точка magento возвращает идентификатор заказа только в случае успеха и не позволяет вводить URL перенаправления. У нас также были некоторые проблемы с реализацией 3dSecure.
Прежде чем отправиться в тупик, нужно учесть и прояснить для клиента то, что все части внешнего модуля, связанные с внешним интерфейсом, необходимо переписать для вашей конкретной реализации. Поскольку в настоящее время у модуля нет возможности добавлять свои собственные данные в любую безголовую часть. Единственное, что может сделать модуль - предоставить конечные точки API.
В целом безголовый magento определенно возможен. В итоге у нас появился пользовательский модуль для этих настроек и новые конечные точки, которые можно использовать с другими проектами.
Фронт реакции работает очень хорошо, так как фронт реакции может кешировать множество вещей, а бэкэнд узла очень быстр. Мы удаляем время, необходимое для просмотра части стандартного magento запроса таким образом.
Если вы хотите проверить, как он ведет себя, здесь есть ссылки на проекты:
https://therake.com/
https://www.emperia.ch/
Если кто-то говорит по-нидерландски, можете также проверить эту статью о therake: http://www.marketingfacts.nl/berichten/headless-magento-2-de-toekomst-van-e-commerce.
[ОБНОВИТЬ]
Обновление относительно вопроса о порядке оформления заказа. Как я писал оформить заказ было сложно. Платежные шлюзы на уровнях API практически отсутствуют. Например, при обычной оплате большинство платежных шлюзов перенаправляет вас на другой сайт для завершения платежа. Некоторые из этих модулей создают заказы в magento в состоянии ожидания, некоторые (PayPal Express) перенаправляют до создания заказа. Эти перенаправления часто полагаются на вашу сессию, чтобы получить детали обратно после возвращения. Это было проблемой, так как конечная точка API placeOrder возвращает только идентификатор только что созданного заказа, а не информацию о перенаправлении. Поскольку мы также работали не с magento напрямую, а с бэкэндом узла, сеанс необходимо правильно восстановить при возврате из шлюза. Наши текущие проекты имеют интегрированные шлюзы PayPal и Adyen, и это заняло у нас более 150 часов.
источник
Вот проект с открытым исходным кодом https://github.com/ishakhsuvarov/going-headless
Этот репозиторий создается для обсуждения «Going Headless», который был частью сеансов Imagine 2017 DevExchange, для сбора и обсуждения идей, касающихся использования веб-API Magento с пользовательским интерфейсом. Основная цель этого проекта - собрать наиболее критические и болезненные моменты в потоках Web API и разработать решение, которое удовлетворяло бы большинству вариантов использования.
источник