Ruby on Rails

GraphQL āļāļąāļš Rails

graphql-ruby gem, types, queries, mutations, resolvers, N+1 queries, batching

20 āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒÂ·
Senior
1

gem āđƒāļ”āļ—āļĩāđˆāđƒāļŠāđ‰āļāļąāļ™āļĄāļēāļāļ—āļĩāđˆāļŠāļļāļ”āđƒāļ™āļāļēāļĢāļ™āļģ GraphQL āļĄāļēāđƒāļŠāđ‰āđƒāļ™āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™ Rails?

āļ„āļģāļ•āļ­āļš

gem graphql-ruby (āļĄāļąāļāđ€āļĢāļĩāļĒāļāļŠāļąāđ‰āļ™ āđ† āļ§āđˆāļē graphql) āđ€āļ›āđ‡āļ™āđ‚āļ‹āļĨāļđāļŠāļąāļ™āļĄāļēāļ•āļĢāļāļēāļ™āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ™āļģ GraphQL āļĄāļēāđƒāļŠāđ‰āđƒāļ™ Rails āļĄāļąāļ™āļĄāļ­āļš Ruby DSL āļ—āļĩāđˆāļŠāļ·āđˆāļ­āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđ„āļ”āđ‰āļ”āļĩāļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļāļģāļŦāļ™āļ” types, queries āđāļĨāļ° mutations āļĢāļ§āļĄāļ–āļķāļ‡āļāļēāļĢāļœāļŠāļēāļ™āļĢāļ§āļĄāļāļąāļš Rails āđāļšāļš native āļœāđˆāļēāļ™ routes āđāļĨāļ° controllers āļ”āļđāđāļĨāļĢāļąāļāļĐāļēāļ­āļĒāđˆāļēāļ‡āļ•āđˆāļ­āđ€āļ™āļ·āđˆāļ­āļ‡āđ‚āļ”āļĒ Robert Mosolgo āđāļĨāļ°āļ–āļđāļāđƒāļŠāđ‰āļ‡āļēāļ™āđ‚āļ”āļĒāļšāļĢāļīāļĐāļąāļ—āļ­āļĒāđˆāļēāļ‡ GitHub āđāļĨāļ° Shopify āđƒāļ™āļĢāļ°āļšāļš production

2

āļˆāļ°āļāļģāļŦāļ™āļ” Object type āđƒāļ™ graphql-ruby āđ€āļžāļ·āđˆāļ­āđāļ—āļ™āđ‚āļĄāđ€āļ”āļĨ User āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ„āļĢ?

āļ„āļģāļ•āļ­āļš

Object type āđƒāļ™ graphql-ruby āļŠāļ·āļšāļ—āļ­āļ”āļˆāļēāļ Types::BaseObject āđāļĨāļ°āđ€āļ›āļīāļ”āđ€āļœāļĒāļŸāļīāļĨāļ”āđŒāļœāđˆāļēāļ™āđ€āļĄāļ˜āļ­āļ” field āđāļ•āđˆāļĨāļ°āļŸāļīāļĨāļ”āđŒāļĢāļ°āļšāļļāļŠāļ·āđˆāļ­ āļŠāļ™āļīāļ” GraphQL (String, Int, ID āđ€āļ›āđ‡āļ™āļ•āđ‰āļ™) āđāļĨāļ°āļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™ nullable āļ‚āļ­āļ‡āļĄāļąāļ™ āđāļ™āļ§āļ—āļēāļ‡āđāļšāļš declarative āļ™āļĩāđ‰āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļ„āļ§āļšāļ„āļļāļĄāđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđāļĄāđˆāļ™āļĒāļģāļ§āđˆāļēāļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļ”āļ‚āļ­āļ‡āđ‚āļĄāđ€āļ”āļĨāļ–āļđāļāđ€āļ›āļīāļ”āđ€āļœāļĒāļœāđˆāļēāļ™ GraphQL API āļ—āļģāđƒāļŦāđ‰āļĄāļĩāļāļēāļĢāđāļĒāļāļ—āļĩāđˆāļŠāļąāļ”āđ€āļˆāļ™āļĢāļ°āļŦāļ§āđˆāļēāļ‡āđ‚āļĄāđ€āļ”āļĨ ActiveRecord āļāļąāļšāļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāđāļšāļš GraphQL āļ‚āļ­āļ‡āļĄāļąāļ™

3

āļ„āļ§āļēāļĄāđāļ•āļāļ•āđˆāļēāļ‡āļŦāļĨāļąāļāļĢāļ°āļŦāļ§āđˆāļēāļ‡ Query āđāļĨāļ° Mutation āđƒāļ™ GraphQL āļ„āļ·āļ­āļ­āļ°āđ„āļĢ?

āļ„āļģāļ•āļ­āļš

Queries āđƒāļŠāđ‰āļŠāļģāļŦāļĢāļąāļšāļ­āđˆāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ (āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāđāļšāļš GET) āđƒāļ™āļ‚āļ“āļ°āļ—āļĩāđˆ Mutations āđƒāļŠāđ‰āļŠāļģāļŦāļĢāļąāļšāđāļāđ‰āđ„āļ‚āļ‚āđ‰āļ­āļĄāļđāļĨ (āļŠāļĢāđ‰āļēāļ‡ āļ­āļąāļ›āđ€āļ”āļ• āļĨāļš) āļ•āļēāļĄāđāļšāļšāđāļœāļ™āļ‚āļ­āļ‡ GraphQL queries āđ€āļ›āđ‡āļ™ idempotent āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļ–āļ—āļģāļ‡āļēāļ™āđāļšāļšāļ‚āļ™āļēāļ™āđ„āļ”āđ‰ āđƒāļ™āļ‚āļ“āļ°āļ—āļĩāđˆ mutations āļˆāļ°āļ—āļģāļ‡āļēāļ™āļ•āļēāļĄāļĨāļģāļ”āļąāļšāđ€āļžāļ·āđˆāļ­āļĢāļąāļšāļ›āļĢāļ°āļāļąāļ™āļĨāļģāļ”āļąāļšāļ‚āļ­āļ‡āļœāļĨāļ‚āđ‰āļēāļ‡āđ€āļ„āļĩāļĒāļ‡ āļāļēāļĢāđāļĒāļāđāļĒāļ°āļ™āļĩāđ‰āđ€āļ›āđ‡āļ™āļžāļ·āđ‰āļ™āļāļēāļ™āļŠāļģāļ„āļąāļāļŠāļģāļŦāļĢāļąāļš GraphQL API āļ—āļĩāđˆāļ­āļ­āļāđāļšāļšāļĄāļēāļ­āļĒāđˆāļēāļ‡āļ”āļĩ

4

āļˆāļ°āļ›āļĢāļ°āļāļēāļĻāļŸāļīāļĨāļ”āđŒāļ—āļĩāđˆāļĄāļĩ arguments āđƒāļ™ Query type āļ‚āļ­āļ‡ graphql-ruby āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ„āļĢ?

5

āļ›āļąāļāļŦāļēāļ”āđ‰āļēāļ™āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ—āļĩāđˆāļŠāļģāļ„āļąāļāđƒāļ”āļ—āļĩāđˆāļĄāļąāļāđ€āļāļīāļ”āļ‚āļķāđ‰āļ™āļšāđˆāļ­āļĒāļāļąāļš GraphQL āđāļĨāļ° association āļ‚āļ­āļ‡ ActiveRecord?

+17 āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ

āļŦāļąāļ§āļ‚āđ‰āļ­āļŠāļąāļĄāļ āļēāļĐāļ“āđŒ Ruby on Rails āļ­āļ·āđˆāļ™āđ†

āļžāļ·āđ‰āļ™āļāļēāļ™ Ruby

Junior
25 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļŠāļīāļ‡āļ§āļąāļ•āļ–āļļāđƒāļ™ Ruby

Junior
20 āļ„āļģāļ–āļēāļĄ

āļžāļ·āđ‰āļ™āļāļēāļ™ Rails

Junior
18 āļ„āļģāļ–āļēāļĄ

Routing & Controllers

Junior
22 āļ„āļģāļ–āļēāļĄ

āļžāļ·āđ‰āļ™āļāļēāļ™ ActiveRecord

Junior
25 āļ„āļģāļ–āļēāļĄ

Views āđāļĨāļ° ERB Templates

Junior
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāđ‚āļĒāļ‡āļ‚āļ­āļ‡ ActiveRecord

Mid-Level
24 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļŠāļ­āļšāļ–āļēāļĄ ActiveRecord āļ‚āļąāđ‰āļ™āļŠāļđāļ‡

Mid-Level
28 āļ„āļģāļ–āļēāļĄ

āļŸāļ­āļĢāđŒāļĄ Rails

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļĒāļ·āļ™āļĒāļąāļ™āļ•āļąāļ§āļ•āļ™āđāļĨāļ°āļāļēāļĢāļ­āļ™āļļāļāļēāļ•

Mid-Level
22 āļ„āļģāļ–āļēāļĄ

Asset Pipeline āļŠāļĄāļąāļĒāđƒāļŦāļĄāđˆāđāļĨāļ° frontend

Mid-Level
18 āļ„āļģāļ–āļēāļĄ

āđ‚āļŦāļĄāļ” API āļ‚āļ­āļ‡ Rails

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļ—āļ”āļŠāļ­āļšāļ”āđ‰āļ§āļĒ RSpec

Mid-Level
24 āļ„āļģāļ–āļēāļĄ

ActiveJob & Background Jobs

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

ActionCable & WebSockets

Mid-Level
18 āļ„āļģāļ–āļēāļĄ

ActionMailer

Mid-Level
18 āļ„āļģāļ–āļēāļĄ

ActiveStorage

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

āļāļĨāļĒāļļāļ—āļ˜āđŒāļāļēāļĢ Caching

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢ Migration āļ‚āļąāđ‰āļ™āļŠāļđāļ‡

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

Rails Engines āđāļĨāļ°āđāļ­āļ›āđāļšāļšāđ‚āļĄāļ”āļđāļĨāļēāļĢāđŒ

Senior
18 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļāļēāļĢāļ—āļģāļ‡āļēāļ™

Senior
26 āļ„āļģāļ–āļēāļĄ

Design Patterns āđƒāļ™ Rails

Senior
22 āļ„āļģāļ–āļēāļĄ

āđ€āļĄāļ•āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļĄāļīāļ‡āđƒāļ™ Ruby

Senior
20 āļ„āļģāļ–āļēāļĄ

āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāļ‚āļ­āļ‡ Rails

Senior
22 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļ”āļĩāļžāļĨāļ­āļĒāđāļĨāļ°āđ‚āļ›āļĢāļ”āļąāļāļŠāļąāļ™

Senior
20 āļ„āļģāļ–āļēāļĄ

Monitoring & Logging

Senior
20 āļ„āļģāļ–āļēāļĄ

āļāļĨāļĒāļļāļ—āļ˜āđŒāļāļēāļĢāļ­āļąāļ›āđ€āļāļĢāļ” Rails

Senior
18 āļ„āļģāļ–āļēāļĄ

āđ€āļŠāļĩāđˆāļĒāļ§āļŠāļēāļ Ruby on Rails āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ„āļĢāļąāđ‰āļ‡āļ–āļąāļ”āđ„āļ›

āđ€āļ‚āđ‰āļēāļ–āļķāļ‡āļ„āļģāļ–āļēāļĄāļ—āļąāđ‰āļ‡āļŦāļĄāļ” flashcards āđāļšāļšāļ—āļ”āļŠāļ­āļšāđ€āļ—āļ„āļ™āļīāļ„ āđāļšāļšāļāļķāļāļŦāļąāļ” code review āđāļĨāļ°āļ•āļąāļ§āļˆāļģāļĨāļ­āļ‡āļŠāļąāļĄāļ āļēāļĐāļ“āđŒ

āđ€āļĢāļīāđˆāļĄāđƒāļŠāđ‰āļŸāļĢāļĩ