电商系统 活跃维护

EcommerceAPI

rasadov/EcommerceAPI

模块化电商后端,带有 GraphQL 网关和用于账户、产品、订单、支付和推荐的 gRPC 微服务。

696
Stars 标星
106
Forks 分支
6
Watchers 关注
3
Open Issues
Go
主要语言
Apache-2.0
开源协议
852 KB
仓库大小
2 个月前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:rasadov/EcommerceAPI
git clone https://github.com/rasadov/EcommerceAPI.git
git clone git@github.com:rasadov/EcommerceAPI.git
README.md master

机器翻译正文由机器翻译自项目原始文档(英文),排版经程序统一处理,可能存在偏差,请以原项目仓库为准。

电子商务微服务

此仓库托管了一个示例电子商务平台,展示了使用多个Go服务以及一个基于Python的推荐服务的微服务架构。该项目展示了:

  • 服务之间的gRPC通信
  • 基于Kafka的事件流处理管道
  • 为客户端提供统一的GraphQL API网关
  • 用于产品搜索的Elasticsearch集成

🧭 概览

该系统由多个微服务组成:

  • 账户(Go):管理用户账户、认证和授权。
  • 产品(Go):产品的增删改查(CRUD);在Elasticsearch中索引产品数据。
  • 订单(Go):处理订单创建和持久化;向Kafka发布事件。
  • 支付(Go):处理支付操作并向订单微服务发送更新。
  • 推荐系统(Python):消费Kafka事件并生成产品推荐。
  • API网关(Go):提供统一的GraphQL API供前端客户端使用。

整个生态系统使用Docker Compose进行容器化。数据存储包括PostgreSQL、Elasticsearch和Kafka。


🏗 架构图

以下是系统架构的高级概述:

通信概述

  • API Gateway (GraphQL) talks to:

    • Account client → Account server → Postgres
    • Product client → Product server → ElasticSearch Kafka
    • Order client → Order server → Postgres Kafka
      (还通过 gRPC 与产品服务通信)
    • Payment client → Payment service → payment provider Postgres Kafka
    • Recommender client → Recommender server (Python)→ Postgres (Replica) Kafka
  • 事件流:

    • Order 和 Product 服务充当 Kafka 生产者。
    • Payment 服务是一个 Kafka 消费者,用于接收产品事件并将其保存到支付提供商(DodoPayments)中。
    • Recommender 服务也是一个 Kafka 消费者,负责获取订单/产品事件并更新内部推荐状态。

⚙ 服务

🧑‍💼 账户服务(Go)

  • 职责:注册、登录、获取账户数据、生成JWT令牌。
  • 数据库:PostgreSQL

📦 产品服务(Go)

  • 职责:产品的增删改查操作,索引到Elasticsearch,向Kafka发布事件。
  • 数据库:Elasticsearch

🛒 订单服务(Go)

  • 职责:订单创建、价格计算、数据持久化、Kafka事件发布。
  • 依赖:调用产品服务以获取产品信息。

🧠 推荐服务(Python)

  • 职责:Kafka消费者,根据产品/订单事件构建推荐。
  • 技术栈:Python gRPC PostgreSQL(产品数据库副本)

🚪 API网关(Go)

  • 职责:在 /graphql 提供统一的GraphQL端点。
  • 实现:使用所有微服务的gRPC客户端和模式拼接。

🚀 入门

✅ 前提条件

在运行项目之前,确保你已安装以下内容:


📥 克隆仓库

  git clone https://github.com/rasadov/EcommerceAPI.git
  cd ecommercemicroservices

🐳 运行 Stack

要使用 Docker Compose 构建并启动所有服务,请运行:

# Step 1: Build the base image
docker compose build base

# Step 2: Build and start all services
docker compose up -d --build```

这将启动:

  • 微服务(account,order,product,payment,graphql)
  • 基于 Python 的 recommender 服务
  • 数据库:PostgreSQL,Elasticsearch
  • Kafka Zookeeper
  • GraphQL 网关

🌐 访问 API

一切运行正常后,打开你的浏览器访问:


📬 使用方法(GraphQL)

以下是您可以在 GraphQL Playground 中测试的示例 GraphQL 查询和变更。


📝 注册新账户

mutation {
  register(account: {
    name: "Alice"
    email: "alice@example.com"
    password: "secret123"
  }) {
    token
  }
}

🔐 登录

mutation {
  login(account: {
    email: "alice@example.com"
    password: "secret123"
  }) {
    token
  }
}

➕ 创建产品

mutation {
  createProduct(product: {
    name: "Camera"
    description: "A digital camera"
    price: 99.99
  }) {
    id
    name
  }
}

🔍 查询产品

query {
  product(pagination: { skip: 0, take: 10 }) {
    id
    name
    price
  }
}

🛒 创建订单

mutation {
  createOrder(order: {
    products: [
      { id: "PRODUCT_ID", quantity: 2 }
    ]
  }) {
    id
    totalPrice
    products {
      name
      quantity
    }
  }
}

🤝 贡献

我们欢迎贡献!要贡献:

分叉仓库

创建一个新分支

提交并推送你的更改

打开一个拉取请求

👤 作者

Rauf Asadov GitHub: @rasadov 领英: Rauf Asadov 邮箱: raufasadov23@gmail.com

🪪 许可证

本项目根据 Apache 许可证 2.0 授权。

本站来源与版权声明
  • 本文标题:EcommerceAPI - 模块化电商后端
  • 本文链接:https://www.cn121.com/shop/rasadov-ecommerceapi.html
  • 原项目:rasadov/EcommerceAPI 版权归原作者 rasadov 及贡献者所有
  • 收录信息:本站于 2026-10-08 收录本项目,本页所列协议与仓库指标均为收录当时的状态;该日期之后原项目的版本更新与协议变更,本页不作同步。
  • 开源协议:收录时本项目采用 Apache-2.0(查看 LICENSE 原文),本站译文为其衍生内容;使用、修改、分发请以该仓库 LICENSE 原文为准。本站对原文仅作排版与图片地址适配, 并保留原项目的 NOTICE 与署名要求。
  • 站点出处:本文首发于 OneTwoOne,收录自 GitHub 开源项目 rasadov/EcommerceAPI。
  • 翻译说明:本页正文为人工智能生成内容——由机器翻译对原项目 README 初译、经程序校验排版,可能存在错漏,请以原项目文档为准。
  • 引用声明:商业转载、第三方聚合或 AI 检索训练引用时,请务必保留以上来源出处、本文永久链接,以及原项目的版权声明与许可信息。
  • 下架通道:若原项目此后变更或收紧了许可协议、或作者/权利人认为本站的收录方式(译文、排版适配、简介翻译等)超出其授权范围,请通过 xyd3302001@163.com 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。