Prisma是我现在接触的最新的技术之一了,什么是Prisma呢,甚至你去国内网站上搜索,更多的结果都是一种使用了“先进”人工智能技术的图片编辑软件。
GraphQL大家应该都听说过,那么Graphql这么切合很多工程需求,到底为什么到现在还是可以说处于一种不温不火的状态呢?graphql自身的一些问题其实组织了它的发展,最典型的就是graphql更像是一门全新的查询语言,其复杂程度并不能被所有人所理解。
那么prisma做了什么呢?
首先prisma让你可以去忽略graphql的语法,它通过 Prisma client使用通用数据库抽象替换传统的 ORM 和数据访问层,它和docker结合的相当好,可以粘合graphql服务器和数据库。
写个简单的小应用看一下。
首先是安装:
npm i -g prisma找个工作区创建自己的项目:
prisma init hello-world这时 prisma会提示:
C:\Users\starinsun\Documents\docker>prisma init asd ? Set up a new Prisma server or deploy to an existing server? (Use arrow keys) Set up a new Prisma server for local development (based on docker-compose): > Use existing database Connect to existing database Create new database Set up a local database using Docker Or deploy to an existing Prisma server: Demo server + MySQL database Free development environment hosted in Prisma Cloud (requires login) (Move up and down to reveal more choices)我们推荐使用docker,即前两个选项,这里拿第一个选项展示,你可以选择数据库
> MySQL MySQL compliant databases like MySQL or MariaDB PostgreSQL PostgreSQL database MongoDB Mongo Database然后是客户端语言:
> Prisma TypeScript Client Prisma Flow Client Prisma JavaScript Client Prisma Go Client Don't generate之后他就会提示并生成文件。
Created 3 new files: prisma.yml Prisma service definition datamodel.prisma GraphQL SDL-based datamodel (foundation for database) docker-compose.yml Docker configuration file Next steps: 1. Open folder: cd asd 2. Start your Prisma server: docker-compose up -d 3. Deploy your Prisma service: prisma deploy 4. Read more about Prisma server: http://bit.ly/prisma-server-overview我们一个个看,首先是prisma.yml,这个文件是用来配置prisma服务的:
endpoint: http://localhost:4466 datamodel: datamodel.prisma generate: - generator: typescript-client output: ./generated/prisma-client/定义了端口和模型文件的名字。
接着是熟悉的docker-compose.yml:
version: '3' services: prisma: image: prismagraphql/prisma:1.34 restart: always ports: - "4466:4466" environment: PRISMA_CONFIG: | port: 4466 # uncomment the next line and provide the env var PRISMA_MANAGEMENT_API_SECRET=my-secret to activate cluster security # managementApiSecret: my-secret databases: default: connector: postgres host: postgres user: prisma password: prisma rawAccess: true port: 5432 migrations: true postgres: image: postgres restart: always # Uncomment the next two lines to connect to your your database from outside the Docker environment, e.g. using a database GUI like Postico # ports: # - "5432:5432" environment: POSTGRES_USER: prisma POSTGRES_PASSWORD: prisma volumes: - postgres:/var/lib/postgresql/data volumes: postgres:可以看到,包括postgresql数据库它也完全可以自动生成,包括端口映射,用户密码,持久化存储等,大家不会写docker-compose的话也可以学习写法噢!
最后是datamodel.prisma:
type User { id: ID! @id name: String! }据说这是SDL方式定义的,暂且先不讲,总之就是定义模型的。
接着我们可以切换到工作目录,执行:
docker-comompose up -d一切准备就绪,我们执行:
prisma deploy这时我们在4466端口可以看到熟悉的graphql界面,同时还可以在/_admin路由下看到精炼的管理界面。
最后关于使用TS与prisma交互我们等下使用nest一起操作,大家先感受一下吧。
