概要

采用前后端分离的开发方式之后, 确实减轻了后端的开发负担, 但同时, 也加大了前后端开发之间沟通的负担.

最近, 我根据之前很长一段时间的项目实践, 总结了一套后端的开发框架, 主要是基于 golang 和 prisma. 它的主要功能在于:

  1. 本身很简单, 更多的在于组合各种技术
  2. 充分利用 prisma 服务生成的 graphql 接口, 几乎所有的 CURD 操作都自动化
  3. 除了通过 prisma 连接数据库, 也可以使用 golang 直接连接数据库, 使用了 gorose 这个 ORM
  4. 提供基本的 JWT 认证功能, 权限和业务关联比较紧, 目前从框架中去掉了
  5. 各类型接口提供的示例 API(graphql/rest), 增加 RESTful 接口只要参照现有的接口就行
  6. 上传/下载 提供接口示例, 也可以用来对接其他存储服务
  7. 提供了 websocket 接口的示例
  8. 整个 golang 工程其实就是个模板, git clone 之后改改名字, 通过配置好自己的 prisma schema, 就能直接使用

用好这个工程, 需要对 prisma-v1 有一定的了解 项目名称 illuminant, 开源在 gitee.com: https://gitee.com/wangyubin/illuminant 欢迎试用!

整体介绍

  1. 核心是 illuminant 工程
  2. 其中 download/upload api 可以直接对接磁盘, 也可以对接存储服务
  3. 通过反向代理连接 prisma 自动生成的的 graphql 接口
  4. 通过 gorose ORM 直接连接 Mysql 数据库
  5. 对外可以提供 3 种类型的接口
    • graphql: prisma 自动生成
    • rest: 作为自动生成接口的补充, 一般项目都不需要此类接口
    • websocket: 如有实时推送或类似这方面的需求, 可以实现相关接口

补充说明

Q. 有了 prisma 自动生成的 graphql 接口, 为什么还要 rest 接口和 websocket 接口?

其实 prisma 自动生成的接口, 已经能够满足各类 CURD 需求.

但是对于一些统计分析的需求, 或者需要后端进行分析和计算的需求, 可以自定义 rest api, 作为 graphql api 的扩展

Q. 为什么要通过 illuminant 加一层反向代理, 而不是直接暴露 prisma 的 graphql 接口?

看过代码就知道, 其实 illuminant 中的反向代理就是直接将客户端的请求转发到 prisma, 没有任何特殊的操作.

但是直接暴露 prisma 生成的接口, 对于后续的管理不利, 至少想对接口做个简单的用户名/密码认证都很困难, 因为你不可能去改 prisma 的源码来支持你的认证机制.

加了一层之后, 可以在 illuminant 中更灵活的对来自客户端的请求进行控制, 后续就算想加权限也不是不可能,

而 prisma 的 graphql 服务, 可以把它看作是一个提供丰富的 graphql 接口的 ORM

Q. 既然 prisma 生成的 graphql 接口已经很强大, 为什么还需要 gorose ORM 来连接数据库

prisma 的 graphql 确实很强大, 也能完成几乎所有的需求.

但是它还是有一些缺陷, 比如对事务的支持不是很好, 而且也不支持直接运行 SQL 等等.

所以, illuminant 中留下这个口子, 也是为了更灵活的应对未知的需求.

illuminant 代码结构介绍

  1. 紫色虚线部分: 是后端的入口

    • main.go: 主要是初始化配置文件, logger 等等
    • route.go: 基于 gin 框架, 包含一些 API 示例(login, upload/download, graphql, todo 的 CURD 等)
    • middleware: 暂时只有一个 jwt 认证的 middleware
  2. 红色虚线部分: prisma 相关的部分, 其实整个 illuminant 框架主要就是想利用 prisma 来减轻 API 的开发
    • prisma: prisma 配置, 包括 prisma 服务定义(prisma.yml), 数据库模型定义(datamodel.prisma), 以及启动服务的 docker-compose.yml
    • prisma-client: 根据数据库自动生成的 prisma golang client, 除了反向代理, 也可以通过这个 client 来访问 prisma
  3. 蓝色虚线部分: 和 prisma 并行的, 另一套自定义 API 的方式
    • controller: 处理请求和返回值
    • service: 处理实际业务, 连接 controller 和 model
    • model: 定义数据库的 ORM
  4. 黄色虚线部分: 共通的模块

解决的问题

illuminant 本意是要做个后端开发的模板, 目的是用来做项目前期的快速的尝试, 着重在提高后端的 开发的效率 上,

利用 prisma, 尽量减少后端的负担, 使得项目能够尽快使用起来, 尽快的验证需求.

如果要用来做为生产环境的系统, 其实也未尝不可.

权限部分的实现我在另外一个项目中也有尝试, 只是还没有集成到 illuminant 中.

高效的后端API开发模板-illuminant的更多相关文章

  1. 奉上简单的.Net后端开发模板

    假定一个场景,开始做开发的你,领导走到你的面前说道:"小伙子,看了简历和最近的工作表现,很不错,现在交给一个任务,开发一个简单的CMS后端接口吧,前端有人配合你",当时你内心读白: ...

  2. 使用egg.js开发后端API接口系统

    什么是Egg.js Egg.js 为企业级框架和应用而生,我们希望由 Egg.js 孕育出更多上层框架,帮助开发团队和开发人员降低开发和维护成本.详细的了解可以参考Egg.js的官网:https:// ...

  3. 超越村后端开发(4:API开发)

    1.users相关的api开发 1.在settings中添加APPID,SECRET 2.在apps/users/views.py内: from chaoyuecun.settings import ...

  4. laravel5.7 前后端分离开发 实现基于API请求的token认证

    最近在学习前后端分离开发,发现 在laravel中实现前后台分离是无法无法使用 CSRF Token 认证的.因为 web 请求的用户认证是通过Session和客户端Cookie的实现的,而前后端分离 ...

  5. 超越村后端开发(3:安装djangorestframework+序列化+API开发前期准备)

    1.安装djangorestframework 1.安装djangorestframework及其依赖包markdown.django-filter. pip install djangorestfr ...

  6. java EE技术体系——CLF平台API开发注意事项(4)——API生命周期治理简单说明

    文档说明 截止日期:20170905,作者:何红霞,联系方式:QQ1028335395.邮箱:hehongxia626@163.com 综述 有幸加入到javaEE技术体系的研究与开发,也得益于大家的 ...

  7. 如何利用vue和php做前后端分离开发?

    新手上路,前端工程师,刚毕业参加工作两个月,上面让我用vue搭建环境和php工程师一起开发,做前后端分离,然而我只用过简单的vue做一些小组件的经验,完全不知道怎样和php工程师配合,ps: php那 ...

  8. C#设计模式总结 C#设计模式(22)——访问者模式(Vistor Pattern) C#设计模式总结 .NET Core launch.json 简介 利用Bootstrap Paginator插件和knockout.js完成分页功能 图片在线裁剪和图片上传总结 循序渐进学.Net Core Web Api开发系列【2】:利用Swagger调试WebApi

    C#设计模式总结 一. 设计原则 使用设计模式的根本原因是适应变化,提高代码复用率,使软件更具有可维护性和可扩展性.并且,在进行设计的时候,也需要遵循以下几个原则:单一职责原则.开放封闭原则.里氏代替 ...

  9. Web前后端分离开发(CRUD)及其演变概括

    今天学习了前后端分离开发模式又从网上查了一些资料就写了一篇博客分享: 一.为什么分离前后端 1.1早期开发 1.2后段为主mvc模式 1.2.1Structs框架介绍 1.2.2Spring mcv开 ...

随机推荐

  1. 微信小程序(1)

    微信小程序 什么是微信小程序? 微信小程序优点 跨平台 打开速度比h5快 不用下载 开发目录结构介绍 1. 小程序Pages目录说明 2. 工具文件夹 3. 全局文件 用法1 全局APP.json文件 ...

  2. 给EmpMapper开放Restful接口

    本文例程下载:https://files.cnblogs.com/files/xiandedanteng/gatling20200428-3.zip 接口控制器代码如下: 请求url和响应都写在了每个 ...

  3. linux 增加新用户无法使用sudo命令解决办法

    昨天一不小心把自己的系统搞崩了,也没有快照,没法进行还原操作,所以只能重装系统解决了,装完系统以后一切正常,当我新增了一个用户,使用sudo命令切换到root用户时,发现怎么都切换不过去,经过百度发现 ...

  4. Flash 0day(CVE-2018-4878)复现过程

    一.前言介绍 2018年2月1号,Adobe官方发布安全通报(APSA18-01),声明Adobe Flash 28.0.0.137及其之前的版本,存在高危漏洞(CVE-2018-4878). 从Ad ...

  5. openstack 介绍

    penstack介绍(1)   一.云计算的前世今生 所有的新事物都不是突然冒出来的,都有前世和今生.云计算也是IT技术不断发展的产物. 要理解云计算,需要对IT系统架构的发展过程有所认识. 请看下 ...

  6. java之死锁

    转载自 https://www.cnblogs.com/xiaoxi/p/8311034.html 一.死锁的定义 多线程以及多进程改善了系统资源的利用率并提高了系统 的处理能力.然而,并发执行也带来 ...

  7. redis实现计数器

    用redis实现计数器 社交产品业务里有很多统计计数的功能,比如: 用户: 总点赞数,关注数,粉丝数 帖子: 点赞数,评论数,热度 消息: 已读,未读,红点消息数 话题: 阅读数,帖子数,收藏数 统计 ...

  8. FTP服务端 FTP服务端搭建教程

    FTP服务端搭建教程如下:一.需要准备以下工具:1.微型FTP服务端.2.服务器管理工具二.操作步骤:1.下载微型FTP服务端.(站长工具包可下载:http://zzgjb.iis7.com/ )2. ...

  9. 本机浏览器无法访问linux的tomcat

    原因:Centos7的防火墙拦截了tomcat访问的8080端口  Redhat 等等linux firewall-cmd --permanent --zone=public --add-port=8 ...

  10. 【转】Locust 性能测试-小案例(1)-环境搭建

    说在前面的话:从这节课开始,将讲解Locust作为一款测试工具,要怎么去应用.首先是"小案例"的系列文章,主要是给大家讲解locustfile也就是场景模拟的一些模式和方法.等到& ...