đ§ āĻĻāĻā§āώāϤāĻž āϝāĻžāĻāĻžāĻ āĻ āĻĒā§āϰāϤāĻŋāϰāĻā§āώāĻžāĻŽā§āϞāĻ takeaway
Skill checkpoint: Local GraphQL schema-āϤ⧠query/type āĻ resolver-āĻāϰ āĻā§āĻŽāĻŋāĻāĻž āĻļāύāĻžāĻā§āϤ āĻāϰā§āĨ¤
Defense checkpoint: āĻĒā§āϰāϤāĻŋ resolver-āĻ authorization, query depth limit āĻ rate limit āĻĒā§āϰā§ā§āĻ āĻāϰā§.
Lab scope: āĻļā§āϧ⧠āύāĻŋāĻā§āϰ lab, synthetic data āĻŦāĻž āϞāĻŋāĻāĻŋāϤ āĻ
āύā§āĻŽāϤāĻŋāĻĒā§āϰāĻžāĻĒā§āϤ target-āĻ āĻ
āύā§āĻļā§āϞāύ āĻāϰā§āĨ¤ Real credential, token āĻŦāĻž customer data āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻā§āϰ⧠āύāĻžāĨ¤
Portfolio proof: finding, impact, fix āĻ retest āύāĻŋā§ā§ ā§Ģ-āϞāĻžāĻāύā§āϰ redacted note āϰāĻžāĻā§āĨ¤
đēī¸ āĻāϞā§āĻĒ ā§§: GraphQL āĻā§? REST API-āϰ āĻā§ā§ā§ āĻā§āĻĨāĻžā§ āĻāϞāĻžāĻĻāĻž?
āϏāĻžāϧāĻžāϰāĻŖ REST API-āϤ⧠āĻĄā§āĻāĻž āĻĒā§āϤ⧠āĻšāϞ⧠āϤā§āĻŽāĻžāĻā§ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻĻāϰāĻāĻžā§ āϝā§āϤ⧠āĻšā§ â āϝā§āĻŽāύ `/get_user`, `/get_orders`, `/get_wallet`āĨ¤ āĻāĻŋāύā§āϤ⧠GraphQL āĻšāϞ⧠āĻāĻāĻāĻŋ āĻāϞāĻāĻŋāĻŽā§āĻ āϏā§āĻĒāĻžāϰāĻļāĻĒā§āϰ āĻŽāϤā§! āĻāĻāĻāĻŋ āĻŽāĻžāϤā§āϰ āĻĻāϰāĻāĻž āĻĨāĻžāĻā§ (`/graphql`), āĻāϰ āϤā§āĻŽāĻŋ āĻāĻŋāϰāĻā§āĻā§ āϞāĻŋāĻā§ āĻĻāĻžāĻ āϤā§āĻŽāĻžāϰ āĻā§ āĻā§ āĻĄā§āĻāĻž āϞāĻžāĻāĻŦā§ â āϏāĻžāϰā§āĻāĻžāϰ āĻ āĻŋāĻ āϤāϤāĻā§āĻā§āĻ āĻŽā§āĻĒā§ āϤā§āĻŽāĻžāĻā§ āĻĢā§āϰāϤ āĻĻā§āĻŦā§!
āĻšā§āϝāĻžāĻāĻžāϰāĻĻā§āϰ āĻāĻžāĻā§ GraphQL āĻšāϞ⧠āĻāĻ āϏā§āĻŦāϰā§āĻā§āĻĻā§āϝāĻžāύ! āĻāĻžāϰāĻŖ āĻ āĻŋāĻāĻŽāϤ⧠āĻāύāĻĢāĻŋāĻāĻžāϰ āύāĻž āĻāϰāĻž āĻĨāĻžāĻāϞ⧠āĻĄā§āĻā§āϞāĻĒāĻžāϰāĻĻā§āϰ āϏāĻŽāϏā§āϤ āϞā§āĻāĻžāύ⧠āĻĄā§āĻāĻžāĻŦā§āϏ āĻā§āĻŦāĻŋāϞ āĻ āĻā§ā§ā§āϰāĻŋ āĻāĻ āϏā§āĻā§āύā§āĻĄā§ āĻĢāĻžāĻāϏ āĻšā§ā§ āϝāĻžā§!
đ āĻāϞā§āĻĒ ā§¨: āĻāύā§āĻā§āϰā§āϏā§āĻĒā§āĻāĻļāύ āĻā§ā§ā§āϰāĻŋ (Introspection Query) â āĻĒā§āϰ⧠āĻŽāĻžāύāĻāĻŋāϤā§āϰ āĻā§āϰāĻŋ!
GraphQL āϏāĻžāϰā§āĻāĻžāϰā§āϰ āĻā§āϤāϰ⧠āĻāĻāĻāĻŋ āĻŽāĻžāϰāĻžāϤā§āĻŽāĻ āĻŦāĻŋāϞā§āĻ-āĻāύ āĻĢāĻŋāĻāĻžāϰ āĻĨāĻžāĻā§, āϝāĻžāϰ āύāĻžāĻŽ IntrospectionāĨ¤ āĻāĻāĻž āĻ
āύā§āĻāĻāĻž āĻā§āϰāĻā§ āĻŦā§āϝāĻžāĻāĻā§āϰ āϏāĻŋāύā§āĻĻā§āĻā§āϰ āĻĒā§āϰ⧠āĻŦā§āϞā§-āĻĒā§āϰāĻŋāύā§āĻ āĻŦāĻž āύāĻāĻļāĻž āĻĻāĻŋā§ā§ āĻĻā§āĻā§āĻžāϰ āĻŽāϤā§!
āϤā§āĻŽāĻŋ āϝāĻĻāĻŋ āϏāĻžāϰā§āĻāĻžāϰ⧠`__schema` āĻā§ā§ā§āϰāĻŋ āĻĒāĻžāĻ āĻŋā§ā§ āĻĻāĻžāĻ, āϤāĻŦā§ āϏāĻžāϰā§āĻāĻžāϰ āĻāĻĻā§āϰ āĻā§āϞā§āϰ āĻŽāϤ⧠āĻŦāϞ⧠āĻĻā§āĻŦā§ āϤāĻžāϰ āĻā§āϤāϰ⧠āĻā§ āĻā§ āĻā§āĻŦāĻŋāϞ āĻāĻā§, āĻ
ā§āϝāĻžāĻĄāĻŽāĻŋāύ āĻĒā§āϝāĻžāύā§āϞā§āϰ āύāĻžāĻŽ āĻā§, āĻā§āύ āĻā§ā§ā§āϰāĻŋ āĻĻāĻŋā§ā§ āĻĒāĻžāϏāĻā§āĻžāϰā§āĻĄ āĻĒāĻžāĻā§āĻž āϝāĻžā§ āĻāĻŦāĻ āĻā§ āĻā§ āĻšāĻŋāĻĄā§āύ āĻŽāĻŋāĻāĻā§āĻļāύ (Mutation) āϰā§ā§āĻā§!
đĨ āĻāϞā§āĻĒ ā§Š: āĻšāĻŋāĻĄā§āύ āĻŽāĻŋāĻāĻā§āĻļāύ āĻ āĻ
ā§āϝāĻžāĻĄāĻŽāĻŋāύ āĻ
ā§āϝāĻžāĻāĻžāĻāύā§āĻ āĻā§āĻāĻāĻāĻžāϰ
āĻāύā§āĻā§āϰā§āϏā§āĻĒā§āĻāĻļāύ āϏā§āĻā§āϝāĻžāύ āĻāϰ⧠āϤā§āĻŽāĻŋ āĻĒā§āϰāĻžā§āĻļāĻ āĻāĻŽāύ āĻāĻŋāĻā§ āĻŽāĻŋāĻāĻā§āĻļāύ āĻĻā§āĻāϤ⧠āĻĒāĻžāĻŦā§ āϝāĻž āϏāĻžāϧāĻžāϰāĻŖ āĻāĻāĻāĻžāϰāĻĻā§āϰ āĻŽā§āĻŦāĻžāĻāϞ āĻ
ā§āϝāĻžāĻĒā§ āĻā§āĻĨāĻžāĻ āĻĻā§āĻāĻžāύ⧠āĻšā§ āύāĻž! āϝā§āĻŽāύ:
- `updateUserRole(userId: 101, role: "SUPER_ADMIN")`
- `applyInstantRefund(orderId: 5542, amount: 50000)`
āĻĄā§āĻā§āϞāĻĒāĻžāϰāϰāĻž āĻšā§āϤ⧠āĻ
ā§āϝāĻžāĻĒā§āϰ āĻŦāĻžāĻāύ āϞā§āĻāĻŋā§ā§ āϰā§āĻā§āĻā§, āĻāĻŋāύā§āϤ⧠āϏāĻžāϰā§āĻāĻžāϰ-āϏāĻžāĻāĻĄā§ āĻĒāĻžāϰāĻŽāĻŋāĻļāύ āĻā§āĻ āϰāĻžāĻā§āύāĻŋ! āĻĢāϞ⧠āϤā§āĻŽāĻŋ āϏāϰāĻžāϏāϰāĻŋ āĻā§ā§ā§āϰāĻŋ āĻĒāĻžāĻ āĻŋā§ā§ āύāĻŋāĻā§āϰ āϏāĻžāϧāĻžāϰāĻŖ āĻ
ā§āϝāĻžāĻāĻžāĻāύā§āĻāĻā§ āĻāĻ āύāĻŋāĻŽā§āώ⧠SUPER_ADMIN āĻŦāĻžāύāĻŋā§ā§ āĻĻāĻŋāϤ⧠āĻĒāĻžāϰā§!
đĄ GraphQL āĻšā§āϝāĻžāĻāĻŋāĻ āĻā§āĻāύāĻŋāĻ
ā§§. āĻĒā§āϰāĻĨāĻŽā§ `__schema` āĻĒāĻžāĻ āĻŋā§ā§ āϏā§āĻāĻŋāĻŽāĻž āĻĄā§āϰāĻžāĻŽā§āĻĒ āĻāϰā§āĨ¤ ⧍. `graphql-voyager` āĻĻāĻŋā§ā§ āĻāĻŋāĻā§āϝā§ā§āĻžāϞ āĻŽā§āϝāĻžāĻĒ āĻŦāĻžāύāĻžāĻāĨ¤ ā§Š. āĻšāĻŋāĻĄā§āύ āĻ
ā§āϝāĻžāĻĄāĻŽāĻŋāύ āĻŽāĻŋāĻāĻā§āĻļāύ āĻā§āĻāĻā§ āĻŦā§āϰ āĻāϰ⧠āĻāĻā§āϏāĻĒā§āϞā§ā§āĻ āĻāϰā§!