{"id":30304,"date":"2025-09-26T15:23:40","date_gmt":"2025-09-26T12:23:40","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=30304"},"modified":"2025-09-26T18:00:12","modified_gmt":"2025-09-26T15:00:12","slug":"prisma-ile-graphql-api-nasil-olusturulur-ve-digitaloceanin-uygulama-platformuna-nasil-dagitilir","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/prisma-ile-graphql-api-nasil-olusturulur-ve-digitaloceanin-uygulama-platformuna-nasil-dagitilir\/","title":{"rendered":"Prisma ile GraphQL API Nas\u0131l Olu\u015fturulur ve DigitalOcean&#8217;\u0131n Uygulama Platformuna Nas\u0131l Da\u011f\u0131t\u0131l\u0131r"},"content":{"rendered":"<p><body><\/p>\n<p>Modern web uygulamalar\u0131 geli\u015ftirirken, g\u00fc\u00e7l\u00fc ve esnek API&#8217;lere sahip olmak kritik \u00f6neme sahiptir. GraphQL, API geli\u015ftirme s\u00fcrecine yeni bir soluk getirirken, Prisma veritaban\u0131 etkile\u015fimlerini kolayla\u015ft\u0131ran g\u00fc\u00e7l\u00fc bir ORM (Object-Relational Mapper) olarak \u00f6ne \u00e7\u0131k\u0131yor. Bu rehberde, bu iki teknolojiyi bir araya getirerek bir GraphQL API&#8217;si olu\u015fturacak ve ard\u0131ndan bu API&#8217;yi DigitalOcean&#8217;\u0131n y\u00f6netimi kolay App Platform&#8217;una nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011freneceksiniz.<\/p>\n<p>Bu kombinasyon, geli\u015ftiricilere h\u0131zl\u0131 prototipleme, \u00f6l\u00e7eklenebilir mimari ve sorunsuz da\u011f\u0131t\u0131m avantajlar\u0131 sunar. GraphQL ile istemciler ihtiya\u00e7 duyduklar\u0131 veriyi tam olarak talep edebilirken, Prisma veritaban\u0131 i\u015flemlerini soyutlayarak g\u00fcvenli ve tip-g\u00fcvenli kod yazmay\u0131 sa\u011flar. DigitalOcean App Platform ise bu uygulamalar\u0131 bulutta bar\u0131nd\u0131rmak i\u00e7in m\u00fckemmel bir PaaS (Platform-as-a-Service) \u00e7\u00f6z\u00fcm\u00fcd\u00fcr.<\/p>\n<h2>Geli\u015ftirme Ortam\u0131n\u0131 Haz\u0131rlama<\/h2>\n<p>API&#8217;mizi olu\u015fturmaya ba\u015flamadan \u00f6nce, gerekli ara\u00e7lar\u0131n sisteminizde kurulu oldu\u011fundan emin olmal\u0131y\u0131z. Node.js ve npm (Node Package Manager) veya yarn, JavaScript ekosistemindeki projeler i\u00e7in temel gereksinimlerdir. TypeScript kullanarak daha g\u00fcvenli ve bak\u0131m\u0131 kolay kod yazmay\u0131 tercih edece\u011fiz.<\/p>\n<h3>\u00d6n Gereksinimler<\/h3>\n<ul>\n<li><strong>Node.js ve npm\/yarn:<\/strong> Sisteminizde kurulu oldu\u011fundan emin olun.<\/li>\n<li><strong>Git:<\/strong> Kodunuzu versiyonlamak ve DigitalOcean&#8217;a da\u011f\u0131tmak i\u00e7in gereklidir.<\/li>\n<li><strong>Metin D\u00fczenleyici:<\/strong> VS Code gibi bir IDE kullanman\u0131z \u015fiddetle tavsiye edilir.<\/li>\n<\/ul>\n<h3>Proje Ba\u015flatma ve Ba\u011f\u0131ml\u0131l\u0131klar\u0131 Y\u00fckleme<\/h3>\n<p>\u00d6ncelikle yeni bir proje dizini olu\u015ftural\u0131m ve temel Node.js projemizi ba\u015flatal\u0131m:<\/p>\n<pre><code class=\"language-bash\">mkdir my-graphql-prisma-api\r\ncd my-graphql-prisma-api\r\nnpm init -y\r\n<\/code><\/pre>\n<p>\u015eimdi gerekli ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fckleyelim. GraphQL API&#8217;miz i\u00e7in Express ve Apollo Server&#8217;\u0131, veritaban\u0131 etkile\u015fimleri i\u00e7in Prisma&#8217;y\u0131 kullanaca\u011f\u0131z. TypeScript deste\u011fi i\u00e7in ilgili paketleri de ekleyelim:<\/p>\n<pre><code class=\"language-bash\">npm install express apollo-server-express graphql prisma @prisma\/client\r\nnpm install -D typescript ts-node nodemon @types\/node\r\n<\/code><\/pre>\n<ul>\n<li><code>express<\/code>: Temel web sunucusu \u00e7at\u0131s\u0131.<\/li>\n<li><code>apollo-server-express<\/code>: Express ile Apollo Server&#8217;\u0131 entegre etmek i\u00e7in.<\/li>\n<li><code>graphql<\/code>: GraphQL \u00e7al\u0131\u015fma zaman\u0131.<\/li>\n<li><code>prisma<\/code> ve <code>@prisma\/client<\/code>: Prisma ORM ve istemcisi.<\/li>\n<li><code>typescript<\/code>: TypeScript derleyicisi.<\/li>\n<li><code>ts-node<\/code>: TypeScript dosyalar\u0131n\u0131 do\u011frudan \u00e7al\u0131\u015ft\u0131rmak i\u00e7in (geli\u015ftirme ortam\u0131nda).<\/li>\n<li><code>nodemon<\/code>: Dosya de\u011fi\u015fikliklerinde sunucuyu otomatik yeniden ba\u015flatmak i\u00e7in.<\/li>\n<li><code>@types\/node<\/code>: Node.js i\u00e7in TypeScript tip tan\u0131mlar\u0131.<\/li>\n<\/ul>\n<h3>TypeScript Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>TypeScript projemizi ba\u015flatmak i\u00e7in <code>tsc --init<\/code> komutunu kullanal\u0131m ve <code>tsconfig.json<\/code> dosyam\u0131z\u0131 d\u00fczenleyelim:<\/p>\n<pre><code class=\"language-bash\">npx tsc --init\r\n<\/code><\/pre>\n<p><code>tsconfig.json<\/code> dosyas\u0131nda a\u015fa\u011f\u0131daki de\u011fi\u015fiklikleri yap\u0131n:<\/p>\n<pre><code class=\"language-json\">{\r\n  \"compilerOptions\": {\r\n    \"target\": \"es2020\",\r\n    \"module\": \"commonjs\",\r\n    \"rootDir\": \".\/src\", \/\/ Kaynak dosyalar\u0131m\u0131z\u0131n bulundu\u011fu dizin\r\n    \"outDir\": \".\/dist\", \/\/ Derlenmi\u015f JavaScript dosyalar\u0131n\u0131n \u00e7\u0131kaca\u011f\u0131 dizin\r\n    \"esModuleInterop\": true,\r\n    \"forceConsistentCasingInFileNames\": true,\r\n    \"strict\": true,\r\n    \"skipLibCheck\": true\r\n  },\r\n  \"include\": [\"src\/<em><\/em>\/*.ts\"], \/\/ Hangi dosyalar\u0131n derlenece\u011fini belirtir\r\n  \"exclude\": [\"node_modules\"]\r\n}\r\n<\/code><\/pre>\n<p>Son olarak, <code>package.json<\/code> dosyam\u0131za baz\u0131 scriptler ekleyelim:<\/p>\n<pre><code class=\"language-json\">{\r\n  \"name\": \"my-graphql-prisma-api\",\r\n  \"version\": \"1.0.0\",\r\n  \"description\": \"\",\r\n  \"main\": \"dist\/index.js\",\r\n  \"scripts\": {\r\n    \"dev\": \"nodemon --exec ts-node src\/index.ts\",\r\n    \"build\": \"tsc\",\r\n    \"start\": \"node dist\/index.js\"\r\n  },\r\n  \"keywords\": [],\r\n  \"author\": \"\",\r\n  \"license\": \"ISC\",\r\n  \"dependencies\": {\r\n    \"apollo-server-express\": \"^3.13.0\",\r\n    \"express\": \"^4.19.2\",\r\n    \"graphql\": \"^16.8.1\",\r\n    \"prisma\": \"^5.14.0\",\r\n    \"@prisma\/client\": \"^5.14.0\"\r\n  },\r\n  \"devDependencies\": {\r\n    \"@types\/node\": \"^20.12.12\",\r\n    \"nodemon\": \"^3.1.0\",\r\n    \"ts-node\": \"^10.9.2\",\r\n    \"typescript\": \"^5.4.5\"\r\n  }\r\n}\r\n<\/code><\/pre>\n<h2>Prisma ile Veritaban\u0131 Modellerini Tan\u0131mlama ve Y\u00f6netme<\/h2>\n<p>API&#8217;mizin temelini olu\u015fturacak veritaban\u0131 modellerini Prisma ile tan\u0131mlayaca\u011f\u0131z. Prisma, veritaban\u0131 \u015feman\u0131z\u0131 tan\u0131mlaman\u0131za, migration&#8217;lar\u0131 y\u00f6netmenize ve veritaban\u0131yla etkile\u015fim kurman\u0131z i\u00e7in tip-g\u00fcvenli bir istemci olu\u015fturman\u0131za olanak tan\u0131r.<\/p>\n<h3>Prisma&#8217;y\u0131 Ba\u015flatma<\/h3>\n<p>Projemizde Prisma&#8217;y\u0131 ba\u015flatmak i\u00e7in a\u015fa\u011f\u0131daki komutu kullanal\u0131m. PostgreSQL kullanaca\u011f\u0131m\u0131z i\u00e7in <code>--datasource-provider postgresql<\/code> bayra\u011f\u0131n\u0131 ekliyoruz:<\/p>\n<pre><code class=\"language-bash\">npx prisma init --datasource-provider postgresql\r\n<\/code><\/pre>\n<p>Bu komut, projenizin k\u00f6k dizininde bir <code>prisma<\/code> klas\u00f6r\u00fc ve i\u00e7inde <code>schema.prisma<\/code> dosyas\u0131 ile bir <code>.env<\/code> dosyas\u0131 olu\u015fturacakt\u0131r. <code>.env<\/code> dosyas\u0131, veritaban\u0131 ba\u011flant\u0131 URL&#8217;nizi i\u00e7erecektir.<\/p>\n<h3>Veritaban\u0131 \u015eemas\u0131n\u0131 Tan\u0131mlama<\/h3>\n<p><code>prisma\/schema.prisma<\/code> dosyas\u0131n\u0131 a\u00e7\u0131n ve \u00f6rnek bir <code>User<\/code> ve <code>Post<\/code> modeli tan\u0131mlayal\u0131m:<\/p>\n<pre><code class=\"language-prisma\">\/\/ prisma\/schema.prisma\r\ngenerator client {\r\n  provider = \"prisma-client-js\"\r\n}\r\n\r\ndatasource db {\r\n  provider = \"postgresql\"\r\n  url      = env(\"DATABASE_URL\")\r\n}\r\n\r\nmodel User {\r\n  id        Int      @id @default(autoincrement())\r\n  email     String   @unique\r\n  name      String?\r\n  posts     Post[]\r\n  createdAt DateTime @default(now())\r\n  updatedAt DateTime @updatedAt\r\n}\r\n\r\nmodel Post {\r\n  id        Int      @id @default(autoincrement())\r\n  title     String\r\n  content   String?\r\n  published Boolean  @default(false)\r\n  author    User     @relation(fields: [authorId], references: [id])\r\n  authorId  Int\r\n  createdAt DateTime @default(now())\r\n  updatedAt DateTime @updatedAt\r\n}\r\n<\/code><\/pre>\n<p><code>.env<\/code> dosyan\u0131zda <code>DATABASE_URL<\/code> de\u011fi\u015fkenini ayarlaman\u0131z gerekecek. Yerel geli\u015ftirme i\u00e7in Docker ile h\u0131zl\u0131ca bir PostgreSQL veritaban\u0131 kurabilir veya bir bulut sa\u011flay\u0131c\u0131s\u0131ndan (DigitalOcean gibi) ge\u00e7ici bir veritaban\u0131 ba\u011flant\u0131 dizesi kullanabilirsiniz.<\/p>\n<pre><code class=\"language-bash\"># .env\r\nDATABASE_URL=\"postgresql:\/\/user:password@localhost:5432\/mydb?schema=public\"\r\n<\/code><\/pre>\n<h3>Migration Olu\u015fturma ve Uygulama<\/h3>\n<p>\u015eemam\u0131z\u0131 tan\u0131mlad\u0131ktan sonra, veritaban\u0131m\u0131z\u0131 bu \u015femaya g\u00f6re g\u00fcncellemek i\u00e7in bir migration olu\u015ftural\u0131m ve uygulayal\u0131m:<\/p>\n<pre><code class=\"language-bash\">npx prisma migrate dev --name init\r\n<\/code><\/pre>\n<p>Bu komut, <code>prisma\/migrations<\/code> dizininde yeni bir migration dosyas\u0131 olu\u015fturacak ve ard\u0131ndan veritaban\u0131n\u0131za uygulayacakt\u0131r. Bu i\u015flem, tan\u0131mlad\u0131\u011f\u0131m\u0131z <code>User<\/code> ve <code>Post<\/code> tablolar\u0131n\u0131 veritaban\u0131n\u0131zda olu\u015fturacakt\u0131r.<\/p>\n<h3>Prisma Client&#8217;\u0131 Olu\u015fturma<\/h3>\n<p>Migration&#8217;lar\u0131 uygulad\u0131ktan sonra, Prisma Client&#8217;\u0131 olu\u015fturmam\u0131z gerekir. Bu istemci, TypeScript kodumuzda veritaban\u0131yla etkile\u015fim kurmam\u0131z\u0131 sa\u011flayacak tip-g\u00fcvenli bir API sa\u011flar.<\/p>\n<pre><code class=\"language-bash\">npx prisma generate\r\n<\/code><\/pre>\n<p>Bu komutu her <code>schema.prisma<\/code> dosyas\u0131n\u0131 de\u011fi\u015ftirdi\u011finizde \u00e7al\u0131\u015ft\u0131rman\u0131z gerekecektir. Geli\u015ftirme s\u00fcrecinde bu genellikle otomatik olarak yap\u0131l\u0131r, ancak da\u011f\u0131t\u0131m \u00f6ncesi manuel \u00e7al\u0131\u015ft\u0131rmak iyi bir al\u0131\u015fkanl\u0131kt\u0131r.<\/p>\n<h2>GraphQL API&#8217;sini Olu\u015fturma<\/h2>\n<p>\u015eema ve veritaban\u0131 etkile\u015fimlerimiz haz\u0131r oldu\u011funa g\u00f6re, GraphQL API&#8217;mizi Apollo Server kullanarak olu\u015ftural\u0131m. API&#8217;miz \u00fc\u00e7 ana b\u00f6l\u00fcmden olu\u015facak: Type Definitions (GraphQL \u015femas\u0131), Resolvers (veri i\u015fleme mant\u0131\u011f\u0131) ve Apollo Server kurulumu.<\/p>\n<h3>GraphQL Type Definitions (\u015eema)<\/h3>\n<p><code>src\/schema.ts<\/code> ad\u0131nda bir dosya olu\u015ftural\u0131m ve GraphQL \u015femam\u0131z\u0131 (SDL &#8211; Schema Definition Language) tan\u0131mlayal\u0131m:<\/p>\n<pre><code class=\"language-typescript\">\/\/ src\/schema.ts\r\nimport { gql } from 'apollo-server-express';\r\n\r\nexport const typeDefs = gql<code>\r\n  type User {\r\n    id: Int!\r\n    email: String!\r\n    name: String\r\n    posts: [Post!]!\r\n    createdAt: String!\r\n    updatedAt: String!\r\n  }\r\n\r\n  type Post {\r\n    id: Int!\r\n    title: String!\r\n    content: String\r\n    published: Boolean!\r\n    author: User!\r\n    authorId: Int!\r\n    createdAt: String!\r\n    updatedAt: String!\r\n  }\r\n\r\n  type Query {\r\n    users: [User!]!\r\n    posts: [Post!]!\r\n    user(id: Int!): User\r\n    post(id: Int!): Post\r\n  }\r\n\r\n  type Mutation {\r\n    createUser(email: String!, name: String): User!\r\n    createPost(title: String!, content: String, authorId: Int!, published: Boolean): Post!\r\n    publishPost(id: Int!): Post\r\n    deletePost(id: Int!): Post\r\n  }\r\n<\/code>;\r\n<\/code><\/pre>\n<h3>GraphQL Resolvers<\/h3>\n<p>\u015eimdi <code>src\/resolvers.ts<\/code> dosyas\u0131n\u0131 olu\u015ftural\u0131m. Resolvers, GraphQL \u015femas\u0131ndaki her alan i\u00e7in veri getirme veya de\u011fi\u015ftirme mant\u0131\u011f\u0131n\u0131 i\u00e7erir. Burada Prisma Client&#8217;\u0131 kullanarak veritaban\u0131 i\u015flemlerini yapaca\u011f\u0131z.<\/p>\n<pre><code class=\"language-typescript\">\/\/ src\/resolvers.ts\r\nimport { PrismaClient } from '@prisma\/client';\r\n\r\n\/\/ Prisma istemcisini burada ba\u015flatmak yerine, her istek i\u00e7in bir ba\u011flam (context) i\u00e7inde sa\u011flamak daha iyidir.\r\n\/\/ Bunu src\/index.ts i\u00e7inde yapaca\u011f\u0131z.\r\ninterface Context {\r\n  prisma: PrismaClient;\r\n}\r\n\r\nexport const resolvers = {\r\n  Query: {\r\n    users: (parent: any, args: any, context: Context) => {\r\n      return context.prisma.user.findMany({ include: { posts: true } });\r\n    },\r\n    posts: (parent: any, args: any, context: Context) => {\r\n      return context.prisma.post.findMany({ include: { author: true } });\r\n    },\r\n    user: (parent: any, args: { id: number }, context: Context) => {\r\n      return context.prisma.user.findUnique({ where: { id: args.id }, include: { posts: true } });\r\n    },\r\n    post: (parent: any, args: { id: number }, context: Context) => {\r\n      return context.prisma.post.findUnique({ where: { id: args.id }, include: { author: true } });\r\n    },\r\n  },\r\n  Mutation: {\r\n    createUser: (parent: any, args: { email: string; name?: string }, context: Context) => {\r\n      return context.prisma.user.create({\r\n        data: {\r\n          email: args.email,\r\n          name: args.name,\r\n        },\r\n      });\r\n    },\r\n    createPost: (parent: any, args: { title: string; content?: string; authorId: number; published?: boolean }, context: Context) => {\r\n      return context.prisma.post.create({\r\n        data: {\r\n          title: args.title,\r\n          content: args.content,\r\n          published: args.published || false,\r\n          author: {\r\n            connect: { id: args.authorId },\r\n          },\r\n        },\r\n      });\r\n    },\r\n    publishPost: (parent: any, args: { id: number }, context: Context) => {\r\n      return context.prisma.post.update({\r\n        where: { id: args.id },\r\n        data: { published: true },\r\n      });\r\n    },\r\n    deletePost: (parent: any, args: { id: number }, context: Context) => {\r\n      return context.prisma.post.delete({\r\n        where: { id: args.id },\r\n      });\r\n    },\r\n  },\r\n};\r\n<\/code><\/pre>\n<h3>Apollo Server&#8217;\u0131 Ba\u015flatma<\/h3>\n<p>\u015eimdi <code>src\/index.ts<\/code> dosyam\u0131z\u0131 olu\u015ftural\u0131m ve Express ile Apollo Server&#8217;\u0131 entegre edelim:<\/p>\n<pre><code class=\"language-typescript\">\/\/ src\/index.ts\r\nimport 'reflect-metadata'; \/\/ Baz\u0131 k\u00fct\u00fcphaneler i\u00e7in gerekli olabilir\r\nimport express from 'express';\r\nimport { ApolloServer } from 'apollo-server-express';\r\nimport { PrismaClient } from '@prisma\/client';\r\nimport { typeDefs } from '.\/schema';\r\nimport { resolvers } from '.\/resolvers';\r\n\r\nconst prisma = new PrismaClient();\r\n\r\nasync function startApolloServer() {\r\n  const app = express();\r\n\r\n  const server = new ApolloServer({\r\n    typeDefs,\r\n    resolvers,\r\n    context: ({ req, res }) => ({ prisma }), \/\/ Her iste\u011fe Prisma istemcisini ekliyoruz\r\n  });\r\n\r\n  await server.start();\r\n  server.applyMiddleware({ app, path: '\/graphql' });\r\n\r\n  const PORT = process.env.PORT || 4000;\r\n\r\n  app.listen(PORT, () => {\r\n    console.log(<code>Server is running on http:\/\/localhost:${PORT}\/graphql<\/code>);\r\n  });\r\n}\r\n\r\nstartApolloServer().catch(error => {\r\n  console.error(\"Apollo Server could not be started:\", error);\r\n});\r\n<\/code><\/pre>\n<p>Art\u0131k API&#8217;mizi yerel olarak \u00e7al\u0131\u015ft\u0131rabiliriz:<\/p>\n<pre><code class=\"language-bash\">npm run dev\r\n<\/code><\/pre>\n<p>Taray\u0131c\u0131n\u0131zda <code>http:\/\/localhost:4000\/graphql<\/code> adresine giderek Apollo Sandbox veya GraphQL Playground aray\u00fcz\u00fcn\u00fc g\u00f6rebilir ve API&#8217;nizi test edebilirsiniz.<\/p>\n<h2>DigitalOcean App Platform&#8217;a Da\u011f\u0131tma<\/h2>\n<p>API&#8217;miz yerel olarak \u00e7al\u0131\u015ft\u0131\u011f\u0131na g\u00f6re, \u015fimdi onu DigitalOcean App Platform&#8217;a da\u011f\u0131tal\u0131m. App Platform, uygulamalar\u0131 kolayca da\u011f\u0131tmak, \u00f6l\u00e7eklendirmek ve y\u00f6netmek i\u00e7in tasarlanm\u0131\u015f bir PaaS \u00e7\u00f6z\u00fcm\u00fcd\u00fcr.<\/p>\n<h3>DigitalOcean Veritaban\u0131 Olu\u015fturma<\/h3>\n<p>\u00d6ncelikle, DigitalOcean hesab\u0131n\u0131zda bir Managed PostgreSQL Database olu\u015fturman\u0131z gerekmektedir. Projenize uygun bir plan se\u00e7in ve veritaban\u0131n\u0131 olu\u015fturun. Veritaban\u0131 olu\u015fturulduktan sonra, &#8220;Connection Details&#8221; (Ba\u011flant\u0131 Detaylar\u0131) b\u00f6l\u00fcm\u00fcnden <code>DATABASE_URL<\/code>&#8216;nizi kopyalay\u0131n.<\/p>\n<h3>Git Deposu Olu\u015fturma<\/h3>\n<p>Uygulaman\u0131z\u0131 DigitalOcean&#8217;a da\u011f\u0131tmak i\u00e7in kodunuzun bir Git deposunda (\u00f6rne\u011fin GitHub, GitLab, Bitbucket) olmas\u0131 gerekir. Projenizin k\u00f6k dizininde bir Git deposu ba\u015flat\u0131n ve kodunuzu uzak bir depoya g\u00f6nderin:<\/p>\n<pre><code class=\"language-bash\">git init\r\ngit add .\r\ngit commit -m \"Initial GraphQL API with Prisma\"\r\ngit branch -M main\r\ngit remote add origin <YOUR_GIT_REPO_URL>\r\ngit push -u origin main\r\n<\/code><\/pre>\n<h3>DigitalOcean App Platform&#8217;da Uygulama Olu\u015fturma<\/h3>\n<ol>\n<li>DigitalOcean kontrol panelinize gidin ve &#8220;Apps&#8221; (Uygulamalar) b\u00f6l\u00fcm\u00fcnden &#8220;Create App&#8221; (Uygulama Olu\u015ftur) se\u00e7ene\u011fine t\u0131klay\u0131n.<\/li>\n<li>Kodunuzun bulundu\u011fu Git sa\u011flay\u0131c\u0131s\u0131n\u0131 se\u00e7in (GitHub, GitLab vb.) ve deponuzu ba\u011flay\u0131n.<\/li>\n<li>Deponuzu ve da\u011f\u0131tmak istedi\u011finiz ana dal\u0131 (genellikle <code>main<\/code> veya <code>master<\/code>) se\u00e7in.<\/li>\n<li>DigitalOcean, projenizi otomatik olarak alg\u0131layacak ve bir &#8220;Web Service&#8221; bile\u015feni \u00f6nerecektir.<\/li>\n<\/ol>\n<h3>Uygulama Ayarlar\u0131n\u0131 Yap\u0131land\u0131rma<\/h3>\n<p>App Platform&#8217;da uygulaman\u0131z i\u00e7in a\u015fa\u011f\u0131daki ayarlar\u0131 yap\u0131land\u0131rman\u0131z gerekecektir:<\/p>\n<ul>\n<li>\n        <strong>Environment Variables (Ortam De\u011fi\u015fkenleri):<\/strong><\/p>\n<ul>\n<li><code>DATABASE_URL<\/code>: DigitalOcean Managed PostgreSQL veritaban\u0131n\u0131zdan kopyalad\u0131\u011f\u0131n\u0131z ba\u011flant\u0131 dizesini buraya yap\u0131\u015ft\u0131r\u0131n.<\/li>\n<li><code>NODE_ENV<\/code>: <code>production<\/code> olarak ayarlay\u0131n.<\/li>\n<li><code>PORT<\/code>: DigitalOcean taraf\u0131ndan otomatik olarak sa\u011flan\u0131r, manuel olarak ayarlaman\u0131za gerek yoktur.<\/li>\n<\/ul>\n<\/li>\n<li>\n        <strong>Build Command (Derleme Komutu):<\/strong> Uygulaman\u0131z\u0131n derlenmesi i\u00e7in gerekli komutlar\u0131 belirtin. Prisma Client&#8217;\u0131n ve TypeScript kodunun derlenmesi \u00f6nemlidir.<\/p>\n<pre><code class=\"language-bash\">npm install && npx prisma generate && npm run build<\/code><\/pre>\n<p>Bu komutlar, ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fckleyecek, Prisma Client&#8217;\u0131 olu\u015fturacak ve TypeScript kodunuzu JavaScript&#8217;e derleyecektir.<\/p>\n<\/li>\n<li>\n        <strong>Run Command (\u00c7al\u0131\u015ft\u0131rma Komutu):<\/strong> Uygulaman\u0131z\u0131 ba\u015flatmak i\u00e7in kullan\u0131lacak komut.<\/p>\n<pre><code class=\"language-bash\">npm start<\/code><\/pre>\n<p>Bu komut, <code>package.json<\/code> dosyan\u0131zdaki <code>start<\/code> scriptini \u00e7al\u0131\u015ft\u0131racakt\u0131r (<code>node dist\/index.js<\/code>).<\/p>\n<\/li>\n<li>\n        <strong>Post-Deploy Command (Da\u011f\u0131t\u0131m Sonras\u0131 Komutu &#8211; \u0130ste\u011fe Ba\u011fl\u0131 ama \u00d6nemli):<\/strong> Veritaban\u0131 migration&#8217;lar\u0131n\u0131 uygulamak i\u00e7in bu komutu kullanabilirsiniz. Bu, yeni bir s\u00fcr\u00fcm da\u011f\u0131t\u0131ld\u0131\u011f\u0131nda veritaban\u0131n\u0131z\u0131n g\u00fcncel kalmas\u0131n\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-bash\">npx prisma migrate deploy<\/code><\/pre>\n<p>Bu komut, uygulaman\u0131z ba\u015far\u0131yla da\u011f\u0131t\u0131ld\u0131ktan sonra \u00e7al\u0131\u015facak ve bekleyen t\u00fcm migration&#8217;lar\u0131 uygulayacakt\u0131r.<\/p>\n<\/li>\n<\/ul>\n<p>T\u00fcm ayarlar\u0131 yapt\u0131ktan sonra, uygulaman\u0131z\u0131 olu\u015fturun. DigitalOcean App Platform, kodunuzu \u00e7ekecek, derleyecek ve da\u011f\u0131tacakt\u0131r. Da\u011f\u0131t\u0131m s\u00fcreci tamamland\u0131\u011f\u0131nda, uygulaman\u0131z\u0131n canl\u0131 URL&#8217;sine eri\u015febilir ve GraphQL API&#8217;nizi kullanmaya ba\u015flayabilirsiniz.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Bu rehberde, GraphQL API&#8217;si olu\u015fturmak i\u00e7in Prisma ve Apollo Server&#8217;\u0131 nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 ve bu API&#8217;yi DigitalOcean App Platform&#8217;a nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011frendiniz. Bu g\u00fc\u00e7l\u00fc ara\u00e7lar\u0131n birle\u015fimi, modern, \u00f6l\u00e7eklenebilir ve bak\u0131m\u0131 kolay API&#8217;ler geli\u015ftirmenize olanak tan\u0131r. GraphQL&#8217;in esnekli\u011fi, Prisma&#8217;n\u0131n veritaban\u0131 soyutlamas\u0131 ve DigitalOcean App Platform&#8217;un kolay da\u011f\u0131t\u0131m yetenekleri, geli\u015ftirme s\u00fcrecinizi \u00f6nemli \u00f6l\u00e7\u00fcde h\u0131zland\u0131rabilir.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p><strong>Q: Neden GraphQL kullanmal\u0131y\u0131m?<\/strong><br \/>\nA: GraphQL, istemcilerin tam olarak ihtiya\u00e7 duyduklar\u0131 veriyi tek bir istekte talep etmelerine olanak tan\u0131r, bu da fazla veya eksik veri getirme sorunlar\u0131n\u0131 ortadan kald\u0131r\u0131r. Ayr\u0131ca, API&#8217;nin evrimini kolayla\u015ft\u0131r\u0131r ve daha iyi dok\u00fcmantasyon sa\u011flar.<\/p>\n<p><strong>Q: Prisma&#8217;n\u0131n avantajlar\u0131 nelerdir?<\/strong><br \/>\nA: Prisma, tip-g\u00fcvenli veritaban\u0131 sorgular\u0131, g\u00fc\u00e7l\u00fc migration sistemi, farkl\u0131 veritabanlar\u0131 i\u00e7in destek ve modern TypeScript geli\u015ftirme ortamlar\u0131yla m\u00fckemmel entegrasyon sunar. Geli\u015ftirici \u00fcretkenli\u011fini art\u0131r\u0131r ve yayg\u0131n veritaban\u0131 hatalar\u0131n\u0131 azalt\u0131r.<\/p>\n<p><strong>Q: DigitalOcean App Platform&#8217;un faydalar\u0131 nelerdir?<\/strong><br \/>\nA: App Platform, altyap\u0131 y\u00f6netimi y\u00fck\u00fcn\u00fc ortadan kald\u0131ran bir PaaS \u00e7\u00f6z\u00fcm\u00fcd\u00fcr. Otomatik da\u011f\u0131t\u0131m, \u00f6l\u00e7ekleme, SSL sertifikalar\u0131, g\u00fcnl\u00fck kayd\u0131 ve izleme gibi \u00f6zellikler sunarak geli\u015ftiricilerin sadece kod yazmaya odaklanmas\u0131n\u0131 sa\u011flar.<\/p>\n<p><strong>Q: API g\u00fcvenli\u011fini nas\u0131l sa\u011flayabilirim?<\/strong><br \/>\nA: API g\u00fcvenli\u011fi i\u00e7in kimlik do\u011frulama (\u00f6rne\u011fin JWT &#8211; JSON Web Tokens) ve yetkilendirme (rol tabanl\u0131 eri\u015fim kontrol\u00fc) mekanizmalar\u0131 eklemeniz gerekir. Apollo Server, context i\u00e7inde kullan\u0131c\u0131 bilgilerini ta\u015f\u0131yarak resolvers i\u00e7inde kolayca yetkilendirme kontrol\u00fc yapman\u0131z\u0131 sa\u011flar. Rate limiting ve input validation da \u00f6nemlidir.<\/p>\n<p><strong>Q: Uygulamam\u0131n \u00f6l\u00e7eklenebilirli\u011fini nas\u0131l art\u0131rabilirim?<\/strong><br \/>\nA: DigitalOcean App Platform, uygulaman\u0131z\u0131 otomatik olarak \u00f6l\u00e7eklendirme yetene\u011fine sahiptir. Daha fazla iste\u011fi i\u015flemek i\u00e7in daha fazla uygulama \u00f6rne\u011fi ekleyebilir veya kaynaklar\u0131 (CPU, RAM) art\u0131rabilirsiniz. Ayr\u0131ca, veritaban\u0131 ba\u011flant\u0131 havuzlama ve \u00f6nbellekleme gibi teknikler de \u00f6l\u00e7eklenebilirli\u011fi art\u0131r\u0131r.<\/p>\n<p><strong>Q: Da\u011f\u0131t\u0131m sonras\u0131 hatalar\u0131 nas\u0131l ay\u0131klayabilirim?<\/strong><br \/>\nA: DigitalOcean App Platform, uygulaman\u0131z\u0131n g\u00fcnl\u00fcklerini (logs) g\u00f6r\u00fcnt\u00fclemenizi sa\u011flar. Da\u011f\u0131t\u0131m sorunlar\u0131 veya \u00e7al\u0131\u015fma zaman\u0131 hatalar\u0131 i\u00e7in bu g\u00fcnl\u00fckleri dikkatlice inceleyin. Ayr\u0131ca, hata izleme hizmetleri (Sentry, DataDog) entegre etmek de yard\u0131mc\u0131 olabilir.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Modern web uygulamalar\u0131 geli\u015ftirirken, g\u00fc\u00e7l\u00fc ve esnek API&#8217;lere sahip olmak kritik \u00f6neme sahiptir. GraphQL, API geli\u015ftirme s\u00fcrecine yeni bir","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1401],"tags":[],"class_list":{"0":"post-30304","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-git","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Prisma ile GraphQL API Nas\u0131l Olu\u015fturulur ve DigitalOcean&#039;\u0131n Uygulama Platformuna Nas\u0131l Da\u011f\u0131t\u0131l\u0131r - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/prisma-ile-graphql-api-nasil-olusturulur-ve-digitaloceanin-uygulama-platformuna-nasil-dagitilir\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Prisma ile GraphQL API Nas\u0131l Olu\u015fturulur ve DigitalOcean&#039;\u0131n Uygulama Platformuna Nas\u0131l Da\u011f\u0131t\u0131l\u0131r\" \/>\n<meta property=\"og:description\" content=\"Modern web uygulamalar\u0131 geli\u015ftirirken, g\u00fc\u00e7l\u00fc ve esnek API&#039;lere sahip olmak kritik \u00f6neme sahiptir. GraphQL, API geli\u015ftirme s\u00fcrecine yeni bir\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/prisma-ile-graphql-api-nasil-olusturulur-ve-digitaloceanin-uygulama-platformuna-nasil-dagitilir\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-09-26T12:23:40+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-09-26T15:00:12+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/prisma-ile-graphql-api-nasil-olusturulur-ve-digitaloceanin-uygulama-platformuna-nasil-dagitilir\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/prisma-ile-graphql-api-nasil-olusturulur-ve-digitaloceanin-uygulama-platformuna-nasil-dagitilir\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Prisma ile GraphQL API Nas\u0131l Olu\u015fturulur ve DigitalOcean&#8217;\u0131n Uygulama Platformuna Nas\u0131l Da\u011f\u0131t\u0131l\u0131r\",\"datePublished\":\"2025-09-26T12:23:40+00:00\",\"dateModified\":\"2025-09-26T15:00:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/prisma-ile-graphql-api-nasil-olusturulur-ve-digitaloceanin-uygulama-platformuna-nasil-dagitilir\/\"},\"wordCount\":1680,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Git\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/prisma-ile-graphql-api-nasil-olusturulur-ve-digitaloceanin-uygulama-platformuna-nasil-dagitilir\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/prisma-ile-graphql-api-nasil-olusturulur-ve-digitaloceanin-uygulama-platformuna-nasil-dagitilir\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/prisma-ile-graphql-api-nasil-olusturulur-ve-digitaloceanin-uygulama-platformuna-nasil-dagitilir\/\",\"name\":\"Prisma ile GraphQL API Nas\u0131l Olu\u015fturulur ve DigitalOcean'\u0131n Uygulama Platformuna Nas\u0131l Da\u011f\u0131t\u0131l\u0131r - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-09-26T12:23:40+00:00\",\"dateModified\":\"2025-09-26T15:00:12+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/prisma-ile-graphql-api-nasil-olusturulur-ve-digitaloceanin-uygulama-platformuna-nasil-dagitilir\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/prisma-ile-graphql-api-nasil-olusturulur-ve-digitaloceanin-uygulama-platformuna-nasil-dagitilir\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/prisma-ile-graphql-api-nasil-olusturulur-ve-digitaloceanin-uygulama-platformuna-nasil-dagitilir\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Prisma ile GraphQL API Nas\u0131l Olu\u015fturulur ve DigitalOcean&#8217;\u0131n Uygulama Platformuna Nas\u0131l Da\u011f\u0131t\u0131l\u0131r\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Prisma ile GraphQL API Nas\u0131l Olu\u015fturulur ve DigitalOcean'\u0131n Uygulama Platformuna Nas\u0131l Da\u011f\u0131t\u0131l\u0131r - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/prisma-ile-graphql-api-nasil-olusturulur-ve-digitaloceanin-uygulama-platformuna-nasil-dagitilir\/","og_locale":"tr_TR","og_type":"article","og_title":"Prisma ile GraphQL API Nas\u0131l Olu\u015fturulur ve DigitalOcean'\u0131n Uygulama Platformuna Nas\u0131l Da\u011f\u0131t\u0131l\u0131r","og_description":"Modern web uygulamalar\u0131 geli\u015ftirirken, g\u00fc\u00e7l\u00fc ve esnek API'lere sahip olmak kritik \u00f6neme sahiptir. GraphQL, API geli\u015ftirme s\u00fcrecine yeni bir","og_url":"https:\/\/fatihsoysal.com\/blog\/prisma-ile-graphql-api-nasil-olusturulur-ve-digitaloceanin-uygulama-platformuna-nasil-dagitilir\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-09-26T12:23:40+00:00","article_modified_time":"2025-09-26T15:00:12+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"7 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/prisma-ile-graphql-api-nasil-olusturulur-ve-digitaloceanin-uygulama-platformuna-nasil-dagitilir\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/prisma-ile-graphql-api-nasil-olusturulur-ve-digitaloceanin-uygulama-platformuna-nasil-dagitilir\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Prisma ile GraphQL API Nas\u0131l Olu\u015fturulur ve DigitalOcean&#8217;\u0131n Uygulama Platformuna Nas\u0131l Da\u011f\u0131t\u0131l\u0131r","datePublished":"2025-09-26T12:23:40+00:00","dateModified":"2025-09-26T15:00:12+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/prisma-ile-graphql-api-nasil-olusturulur-ve-digitaloceanin-uygulama-platformuna-nasil-dagitilir\/"},"wordCount":1680,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Git"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/prisma-ile-graphql-api-nasil-olusturulur-ve-digitaloceanin-uygulama-platformuna-nasil-dagitilir\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/prisma-ile-graphql-api-nasil-olusturulur-ve-digitaloceanin-uygulama-platformuna-nasil-dagitilir\/","url":"https:\/\/fatihsoysal.com\/blog\/prisma-ile-graphql-api-nasil-olusturulur-ve-digitaloceanin-uygulama-platformuna-nasil-dagitilir\/","name":"Prisma ile GraphQL API Nas\u0131l Olu\u015fturulur ve DigitalOcean'\u0131n Uygulama Platformuna Nas\u0131l Da\u011f\u0131t\u0131l\u0131r - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-09-26T12:23:40+00:00","dateModified":"2025-09-26T15:00:12+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/prisma-ile-graphql-api-nasil-olusturulur-ve-digitaloceanin-uygulama-platformuna-nasil-dagitilir\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/prisma-ile-graphql-api-nasil-olusturulur-ve-digitaloceanin-uygulama-platformuna-nasil-dagitilir\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/prisma-ile-graphql-api-nasil-olusturulur-ve-digitaloceanin-uygulama-platformuna-nasil-dagitilir\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Prisma ile GraphQL API Nas\u0131l Olu\u015fturulur ve DigitalOcean&#8217;\u0131n Uygulama Platformuna Nas\u0131l Da\u011f\u0131t\u0131l\u0131r"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30304","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=30304"}],"version-history":[{"count":2,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30304\/revisions"}],"predecessor-version":[{"id":30341,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30304\/revisions\/30341"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=30304"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=30304"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=30304"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}