【问题标题】:using magento apis for ecommerce website将magento api用于电子商务网站
【发布时间】:2012-09-28 12:57:37
【问题描述】:

我是 magento 的初学者,正在使用 magento 创建一个网站。我注意到 magento 有很多 api,它们公开了我创建电子商务网站所需的所有功能。所以,我想使用magento的api来获取数据,但是单独开发UI而不依赖magento。我发现了很多通过 magento 主题开发网站的参考资料,但不是那些在单独的 MVC 中开发 UI 并且纯粹使用 magento 作为服务层的参考资料。我的方法有什么问题吗?

编辑:我对 apis 中的 db 性能问题以及外部缓存如何缓解该问题有了很大的了解,但我仍然不明白将 magento 用作服务层(即通过使用为网站加油) magento 的 api),它们还有其他问题吗?

【问题讨论】:

  • 好吧,主要问题是你找不到任何关于该主题的参考资料 :)
  • 我尝试了很多,但似乎它不是首选方法,因此缺乏有关它的文章。

标签: magento e-commerce


【解决方案1】:

以下是我们克服 Magento API 缓慢的方法:

  1. 在 J2EE、Spring MVC 中创建了一个 Web 服务提供者,充当 Magento 和最终用户之间的代理。
  2. J2EE Web 服务提供者公开了 Magento 拥有的几乎所有 API,但也支持 JSON 和 REST 以及 SOAP 和 RPC。
  3. J2EE Web 服务提供商使用基于文档的数据库 (MongoDB) 在 MongoDB 中存储产品目录的快照。
  4. J2EE Web 服务提供程序使用本机 MongoDB 缓存来快速提供数据,而无需运行任何昂贵的 SQL 查询。
  5. 为了避免脏缓存问题,我们在 Magento Admin 中创建了一个挂钩,以便在 Magento 中的数据发生更改时将数据推送到 MongoDB。

这对某些人来说可能听起来有些矫枉过正,但我​​们已经能够实现相当高的吞吐量而不会出现任何缓慢。

【讨论】:

  • 谢谢,听说你使用了 mongodb 很有趣。您是否遇到过 JMC 提到的任何“会话过期”问题。
  • 不,即使在来自多个 Jmeter 节点的模拟重负载下,我们也没有遇到 Magento 的任何“会话过期”错误。
  • 抱歉忘记提早我们没有使用 Magento 的订单管理。我们将购物车状态和订单直接存储在 MongoDB 本身中。
  • 这引出了一个问题,为什么要使用 magento,因为您似乎在做大部分事情之外的事情?
  • 正确,我们多次向自己提出这个问题,回答是主要利用他们的目录管理仪表板,避免自己重新做一遍。
【解决方案2】:

Magento API 很慢,尝试使用 Magento API 运行网站时会遇到严重的性能问题。

由于 EAV 模型的复杂性,您可能会发现仅通过 API 管理产品很困难。

您对使用 Magento 自己的前端有什么特别的顾虑吗?一开始会让人望而生畏,但一旦您了解了布局系统,它实际上非常强大且可自定义。

【讨论】:

  • 谢谢,是什么让 magento apis 比使用 magento 的前端慢?我担心的是我从一些从事 magento wrt 精确控制 UI 元素能力的人那里收到的反馈。作为一个完全的局外人,我喜欢开发具有完全控制权的 UI 并使用一组 API 来支持目录、搜索、购物车、促销、结帐等功能的想法。这似乎是一种更自然的开发方式。
  • 这确实需要一点技巧,但总体而言,您可以为磁电机设计任何您想要的 UI。
  • @142857:Magento API 真的很慢,因为它们没有使用前端 UI 使用的各种缓存。 Magento 的数据库对象模型非常复杂(与 Ofbiz 相同),获取单个产品页面的信息会被转换为多个多连接查询,并且在没有任何缓存的情况下,这些查询往往会在恒定负载下变慢。
  • @anubhava,感谢您的回答。那么,如果我使用memcached之类的缓存层来缓存apis esp product fetch的结果,那应该没问题吧?
  • 是的,如果您使用缓存层,那么它会表现得更好,但是您需要构建一种机制来避免脏缓存并在通过仪表板更改产品详细信息时清除缓存内容。如果您愿意,我可以发布有关我的实施的详细信息。
【解决方案3】:

从技术上讲,可以仅通过 API 运行网站。

您可能面临的问题是一个实际问题,与其花时间尝试学习所有 API 调用,不如学习如何在 Magento 中实现当前的 UI。

这种方法的优点是您还可以更好地了解 Magento 在内部的工作方式,从而允许您利用它的功能来满足您独特的业务需求。

另一个问题是,使用 API 时,您对如何处理/计算事物的控制较少,而在 Magento 本身工作时,对细节的控制较多。

【讨论】:

    【解决方案4】:

    通过 SOAP 和 XMLRPC 访问 Magento 的 API 时,我经常看到“会话过期”问题。我所有的调用都需要异常处理以避免停止执行。我想在 API 之上构建所有内容时,仅此一项就会造成一场噩梦。

    您将获得的最佳答案是在开始编码之前Load Test API。广泛记录测试并查找错误。如果您在正常情况下看到错误,则应该回答您的问题。即使您找到说明可以执行您正在尝试的操作的文档,您仍然需要调整 API 以在运行商店所需的负载下正常工作。

    在投入数小时进行开发之前了解您面临的问题会很好。

    【讨论】:

    • 你能解释一下吗?我尝试过使用 api 并没有遇到任何此类问题。
    • 有时当两个同时调用 API 时,即使调用来自不同的 API 网络用户,magento 也会向两个调用之一返回“会话过期”。会话过期对过期脚本来说就像一个致命错误,如果没有适当的处理,它会停止执行。它可能只是我的配置,但我的硬件和 php 配置足以应付负载。如果您在尝试每分钟调用 API 数百到数千次(运行整个商店所需的)时遇到此问题,请不要感到惊讶。
    猜你喜欢
    • 2011-10-17
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多