商城小程序系统源码(pc/app/wap四合一)
岁月斑驳雨
编辑于 2022年04月26日 10:02

  构建一个商城小程序源码通常需要一个具有数据完整性和低延迟浏览高性能的可靠后端。在整个过程中有很多api需要担心和管理。跨平台开发使得不同平台(如网页、手机)的不同数据需求变得棘手。

  在这篇文章中,我们将深入构建一个强大的小程序商城源码后端,包括所有基本功能,如认证,搜索,库存验证,添加到购物车,订单放置和支付,同时也保持安全性。

  源码:xcxyms.top

  我们希望尽可能少地编写代码,同时在需要时不影响扩展能力和维护数据完整性。我们选择的技术非常简单和强大:

  ●数据库:PostgreSQL(存储和访问数据的固体关系数据库)

  ●api: Hasura GraphQL(用于最无聊的CRUD和健壮的授权)

  ●自定义逻辑:一个简单的用于auth、购物车和订单放置的Node.js服务器。(您可以使用所选择的语言/框架替换它)

  现在让我们进入数据库模式。

  商城小程序源码的数据模型

  我们使用PostgreSQL作为数据存储。我们有一堆表格和正确的关系设置。

  数据模型的简化版本如下所示:

  前端的主要用户工作流是:

  Browse products -> Add product to cart -> Place order -> Make Payment

  在下单前随时加入注册/登录来完成工作流。

  好了,现在让我们分解电子商务应用程序的核心组件:

  ◆带搜索的产品列表

  ◆产品页面

  ◆用户身份验证

  ◆购物车页面和添加到购物车

  ◆优惠券代码验证

  ◆下订单并付款

  ◆给客户发邮件

  数据抓取api

  让我们看看应用程序中最常用的API——从数据库中获取产品。混合所有这些花哨的过滤器,分页,你已经看到了多个端点或条件获取。

  下面是使用Hasura GraphQL获取产品的最简单查询。

  上面的查询获取10个产品(以及它们的元数据,如库存可用性)。现在可以扩展该查询,在产品列表页面中获得所需的尽可能多的信息。

  筛选和排序

  显然,您希望让用户能够在UI上筛选和排序产品。在上面的查询中,您可以添加更多参数来实现相同的目的。

  现在我们添加了where和order_by参数。如果您以前使用过SQL,这将是非常熟悉的领域:)您可以使用相同的查询根据过滤器中的product_id一次获取一个产品。它将处理产品详细信息页面。很简单,不是吗?

  产品搜索API

  可以使用Postgres函数实现对产品表的搜索。我们可以包括表中需要匹配搜索词的列。例如,你可以编写这样的函数:

  这允许您检查给定搜索词与名称、描述和类别的相似性。显然,您可以包含其他要搜索的产品元数据。注意,在pg_trm扩展中可以使用相似函数和<%操作符。阅读关于如何使用pg_trm的更多信息。

  现在有了Hasura,你可以像这样查询postgres函数:

  在这里阅读更多关于Postgres搜索。

  通过正确使用输入反弹效果,您可以使用内置的Postgres特性构建可靠的搜索功能。但是,如果您担心延迟,并且不希望主数据库被搜索操作影响,您也可以利用外部服务,如Algolia与前端代码集成。

  请在评论中告诉我们其他类似的SaaS搜索api:)

  用户身份验证

  接下来是身份验证。该应用程序围绕用户及其登录和购买产品的能力展开。我们在数据库中有一个用户表。客户注册的数据可以放入这个表格中。我们需要一种对用户进行身份验证和管理会话的方法。使用Hasura,可以非常容易地设置基于JWT的身份验证。

  可以在Node.js中编写用于设置登录和生成JWT令牌的后端。下面是使用JWT登录的流程。

  现在,我们可以通过GraphQL在Hasura提供的相同端点上查询上述对定制Node.js服务器的REST API调用。

  Hasura Actions可用于扩展自动生成的GraphQL类型。动作是一种使用自定义查询和变更的自定义业务逻辑来扩展Hasura模式的方法。

  自定义突变的注册将看起来非常简单:

  服务器使用与Hasura共享的自定义秘密生成JWT令牌,并在将用户插入数据库后将令牌返回给客户机。

  另一方面,你也可以使用Auth0、Firebase、Cognito等Auth提供商,它们与Hasura的Auth系统配合得很好。

  总结

  Hasura提供了大多数现成的api。结合一个健壮的权限系统,您实际上只是在编写与业务逻辑相关的后端代码。

  还有更多的电子商务功能,如推荐引擎、支持、跟踪等,我们不会在这篇文章中介绍。但好处是,我们有了所有的基本模块,可以在上面构建任何东西,或者用更少的代码快速地扩展它。

  底线是,对于大多数数据获取需求,实时或只是正常的动态数据,开箱即用GraphQL API从Hasura足够欣慰的因素,你可以迅速扩展和覆盖GraphQL类型和引进自己的API。