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一起操作,大家先感受一下吧。