go-clean-architecture:Golang整洁架构示例


遵循鲍勃叔叔的简洁clean架构原则构建的 REST API 示例

clean架构规则:

  • 独立于框架。该架构不依赖于某些功能丰富的软件库的存在。这允许您使用此类框架作为工具,而不必将您的系统塞入其有限的约束中。
  • 可测试。无需 UI、数据库、Web 服务器或任何其他外部元素即可测试业务规则。
  • 独立于用户界面。UI 可以轻松更改,而无需更改系统的其余部分。例如,Web UI 可以替换为控制台 UI,而无需更改业务规则。
  • 独立于数据库。您可以将 Oracle 或 SQL Server 替换为 Mongo、BigTable、CouchDB 或其他东西。您的业​​务规则不绑定到数据库。
  • 独立于任何外部机构。事实上,您的业务规则根本不了解外部世界的任何信息。

项目描述及结构:
REST API 与基于 JWT 的自定义身份验证系统。核心功能是创建和管理书签(Pocket的简单克隆)。
结构:
4 个域层:

  • 模型层
  • 存储层
  • 用例层
  • 交付层

POST /auth/sign-up
创建新用户
输入示例:
{ "username": "UncleBob", "password": "cleanArch" }

POST /auth/sign-in
请求根据用户凭据获取 JWT 令牌
输入示例:
{ "username": "UncleBob", "password": "cleanArch" }
响应示例:
{ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NzEwMzgyMjQuNzQ0MzI0MiwidXNlciI6eyJJRCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIlVzZXJuYW1lIjoiemhhc2hrZXZ5Y2giLCJQYXNzd29yZCI6IjQyODYwMTc5ZmFiMTQ2YzZiZDAyNjlkMDViZTM0ZWNmYmY5Zjk3YjUifX0.3dsyKJQ-HZJxdvBMui0Mzgw6yb6If9aB8imGhxMOjsk" }

POST /api/bookmarks
创建新书签
输入示例:
{ "url": "https://github.com/zhashkevych/go-clean-architecture", "title": "Go Clean Architecture example" }

GET /api/bookmarks
返回所有用户书签
响应示例:
{ "bookmarks": [ { "id": "5da2d8aae9b63715ddfae856", "url": "https://github.com/zhashkevych/go-clean-architecture", "title": "Go Clean Architecture example" } ] }

DELETE /api/bookmarks
按 ID 删除书签:
输入示例:
{ "id": "5da2d8aae9b63715ddfae856" }