Working with GraphQL Enums: Values Explained

Avatar

By squashlabs, Last Updated: March 20, 2024

Working with GraphQL Enums: Values Explained

Enum Values in GraphQL

In GraphQL, Enums are a type of scalar that can represent a specific set of values. Enums are useful when you want to define a specific range of options for a field or an argument. For example, you might have a "Status" field that can only have values like "ACTIVE", "INACTIVE", or "PENDING". By using Enums, you can enforce the allowed values and provide a clear and consistent way of working with these options.

Related Article: How to Ignore But Handle GraphQL Errors

Defining Enums with Values in GraphQL

To define an Enum with values in GraphQL, you need to specify the possible options within the Enum definition. Each option is defined as a value with an associated name. Here's an example of how to define an Enum called "Status":

enum Status {
  ACTIVE
  INACTIVE
  PENDING
}

In this example, the "Status" Enum has three possible values: "ACTIVE", "INACTIVE", and "PENDING". These values represent the different states that the "Status" field can have.

Syntax for Creating Enums in GraphQL

The syntax for creating Enums in GraphQL is straightforward. You start with the "enum" keyword, followed by the name of the Enum, and then specify the values within curly braces. Each value is written in uppercase letters and can contain alphanumeric characters and underscores. Here's the general syntax:

enum EnumName {
  VALUE1
  VALUE2
  ...
}

For example, if you want to create an Enum called "Color" with values "RED", "GREEN", and "BLUE", the syntax would be:

enum Color {
  RED
  GREEN
  BLUE
}

Using Enums in GraphQL Queries

Enums can be used in GraphQL queries to specify the allowed values for a field or an argument. When working with Enums in queries, you can provide the desired value as a string.

Here's an example of a GraphQL query that uses an Enum as an argument:

query {
  users(status: ACTIVE) {
    id
    name
  }
}

In this example, the "users" field takes an argument called "status" of type "Status", which is an Enum. The argument value is specified as "ACTIVE", which corresponds to one of the allowed values defined in the Enum.

Related Article: Tutorial: Functions of a GraphQL Formatter

Benefits of Using Enums in GraphQL

Using Enums in GraphQL has several benefits:

1. Ensuring data integrity: Enums help enforce a specific set of allowed values, ensuring that only valid options are used for a field or an argument.

2. Improved documentation: Enums provide a clear and concise way of documenting the available options for a field. This makes it easier for developers to understand and use the API.

3. Type safety: Enums allow GraphQL clients to validate the correctness of the provided values at compile time. This helps catch errors early in the development process.

4. Enhanced developer experience: Enums provide auto-completion and validation support in GraphQL IDEs and tools, making it easier for developers to work with the API.

Adding Additional Values to Existing Enums in GraphQL

In GraphQL, once an Enum is defined, its values are fixed and cannot be modified. However, you can extend an existing Enum by creating a new Enum that includes the original values along with additional ones.

Here's an example of how to extend an existing Enum called "Status" with an additional value "ARCHIVED":

extend enum Status {
  ARCHIVED
}

In this example, the "Status" Enum is extended to include a new value "ARCHIVED". This allows you to handle a new state without modifying the existing Enum and potentially breaking existing code that relies on it.

Using Enums as Arguments in GraphQL Mutations

Enums can also be used as arguments in GraphQL mutations. Mutations are used to modify data on the server. By using Enums as arguments, you can ensure that only valid options are provided for the mutation.

Here's an example of a GraphQL mutation that uses an Enum as an argument:

mutation {
  updateUserStatus(id: "123", status: ACTIVE) {
    id
    name
    status
  }
}

In this example, the "updateUserStatus" mutation takes two arguments: "id" of type "String" and "status" of type "Status". The "status" argument is an Enum that specifies the new status for the user. The value "ACTIVE" is provided as the argument, indicating that the user's status should be updated to "ACTIVE".

Handling Enum Values in GraphQL Resolvers

In GraphQL resolvers, you can handle Enum values by accessing the resolved value and performing any necessary logic based on the Enum's defined values.

Here's an example of a resolver function that handles an Enum value:

const resolvers = {
  Query: {
    users: (parent, args) => {
      // Access the resolved value of the Enum argument
      const status = args.status;

      // Perform logic based on the Enum value
      if (status === 'ACTIVE') {
        // Return active users
      } else if (status === 'INACTIVE') {
        // Return inactive users
      } else if (status === 'PENDING') {
        // Return pending users
      }

      // Other logic...

      return users;
    }
  }
};

In this example, the resolver function for the "users" field accesses the resolved value of the Enum argument "status". Based on the value, the resolver performs different logic to filter and return the appropriate users.

Related Article: How to Query Data in GraphQL

Limitations of Using Enums in GraphQL

While Enums are a useful tool in GraphQL, they also have some limitations:

1. Fixed set of values: Once an Enum is defined, its values cannot be modified. If you need to add or remove values, you'll need to extend or create a new Enum.

2. Limited type support: Enums can only represent scalar values. They cannot represent complex types like objects or arrays.

3. No dynamic values: Enums are static and do not support dynamic values based on variables or other runtime conditions.

4. Enum values are case-sensitive: Enum values are case-sensitive, so "ACTIVE" and "active" would be treated as different values.

Difference Between Scalar Types and Enum Types in GraphQL

In GraphQL, Scalar types represent primitive values like strings, numbers, booleans, and null. Enum types, on the other hand, represent specific sets of values that are predefined and can be used as options for fields or arguments.

The main difference between Scalar types and Enum types is that Scalar types can have any value that matches their respective primitive types, while Enum types can only have values that are explicitly defined within the Enum.

For example, a Scalar type like "String" can have any valid string value, such as "hello", "world", or an empty string. In contrast, an Enum type like "Status" can only have the values "ACTIVE", "INACTIVE", or "PENDING".

Multiple Enums in a GraphQL Schema

A GraphQL schema can contain multiple Enums, each representing a different set of options for fields or arguments. This allows you to define and use Enums for different purposes throughout your API.

Here's an example of a GraphQL schema with multiple Enums:

enum Status {
  ACTIVE
  INACTIVE
  PENDING
}

enum Color {
  RED
  GREEN
  BLUE
}

type User {
  id: ID!
  name: String!
  status: Status!
}

type Query {
  users(status: Status): [User!]!
  products(color: Color): [Product!]!
}

In this example, the schema defines two Enums: "Status" and "Color". The "Status" Enum represents the different states a user can have, while the "Color" Enum represents the different colors a product can have. These Enums are then used in the "User" and "Product" types, as well as the "users" and "products" queries, to enforce the allowed values for the respective fields and arguments.

Additional Resources



- How to define an enum with values in GraphQL?

- How do I access the values of an enum in GraphQL?

You May Also Like

How to Get Started with GraphQL Basics

GraphQL is a query language for APIs that allows clients to request only the data they need. It offers a more flexible alternative to traditional RES… read more

Sorting Data by Date in GraphQL: A Technical Overview

This article delves into the process of sorting data by date using GraphQL in programming. The article explores how GraphQL works, the purpose of sor… read more

Tutorial: GraphQL Typename

GraphQL typename is a powerful feature that plays a crucial role in programming. From understanding the GraphQL type system and schema to exploring i… read more

Exploring Solid GraphQL

GraphQL has revolutionized the way web developers build and consume APIs. In this article, we take an in-depth look at Solid GraphQL and explore its … read more

Tutorial: GraphQL Input Interface

GraphQL input interface is a crucial tool in programming that enables data manipulation and retrieval. This article takes an in-depth look at its rol… read more

How to Use SWAPI with GraphQL

With the ever-increasing complexity of software development, engineers face new challenges in deploying and testing web applications. Traditional tes… read more

Exploring GraphQL Playground Query Variables

Query variables are a powerful tool within GraphQL Playground that allow developers to pass dynamic values to their GraphQL queries. In this article,… read more

AEM GraphQL: A Critical Component in Modern Programming

AEM GraphQL is revolutionizing programming and enhancing software engineering processes. This article explores the integration, API, queries, mutatio… read more

Step by Step Process: Passing Enum in GraphQL Query

Passing enum values in GraphQL queries is a practical and process. This article provides clear instructions on how to pass enum values in GraphQL que… read more

Exploring OneOf in GraphQL Programming

GraphQL is a powerful programming language that offers various operators for data querying. In this article, we delve into the OneOf operator, explor… read more