-
Notifications
You must be signed in to change notification settings - Fork 6
GraphQL Backend
Sahil Bhatia edited this page Apr 20, 2020
·
9 revisions
GraphQL endpoint: "/v1/graphql"
Each each entity, GraphQL backend is expected to expose all attributes and relationships.
For each foreign key, expose a method with same name (without "_id"), which exposes the associated object.
For each "1-M" relationship, expose a pluralized method named after the related entity. It should return an array of objects.
Fot enums stored as "int", expose a method that return enum mapping.
In case for any entity, a custom method is required, it shall be explicity mentioned in corresponding github issue.
**NOTE: ** Each attribute in GraphQL needs to have:
- data type defined
- marked as required or optional
GraphQL Backend implementation requires 2 essential things:
- Schema Definition Language (or SDL)
- Resolvers
2.1. Query (Read only queries)
2.2. Mutation (handles create, update, delete)
Example: For "users"
Step 1) Schema would be:
type User {
org_id: ID,
org: Organization,
name: String,
email: String,
display_name: String,
profile_image_url: String,
status: UserStatus,
role_id: ID,
role: Role,
timezone: String,
hi_5_quota_balance: Int,
created_on: String,
updated_on: String,
updated_by: User, `
}
enum UserStatus {
Activated,
Deactivated
}
type Organization {
id: ID,
name: String,
contact_email: String,
domain_name: String,
subscription_status: SubscriptionStatus,
subscription_valid_upto: String,
hi_5_limit: Int,
hi_5_quota_renewal_frequency: QuotaRenewalFrequency
}
enum QuotaRenewalFrequency {
...
} `
enum SubscriptionStatus {
...
}
type Query {
users: [User],
organizations: [Organization]
}
type Mutation {
insert_user(org_id: ID!, name: String!, email: String!, ...): User
}
Step 2) Define resolver
const resolvers = {
Query: {
users(parent, args, context, info) {
return users; # list of users queried from db or another endpoint.
}
}
}
Copyright © Josh Software Pvt. Ltd.