Ontwerp een Basis GraphQL Schema met Geavanceerde Query Validatie
description
Met deze prompt leer je hoe je een GraphQL schema maakt dat niet alleen basisfunctionaliteit biedt, maar ook voorkomt dat onjuiste of schadelijke query's je API destabiliseren. Dit verhoogt de betrouwbaarheid en veiligheid van je API en vermindert de kans op fouten of misbruik.
prompt
Help me een basis GraphQL schema te ontwerpen dat geavanceerde query validatie ondersteunt om ongewenste of ongeldige query's te voorkomen.
Validatiecriteria: <voer de validatieregels in die ik wil toepassen, zoals veldbeperkingen, toegestane waarden, of query-complexit ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een basis GraphQL schema dat ondersteuning biedt voor geavanceerde query-validatie, inclusief minimum lengte voor ID-velden en toegestane waarden voor categorieën. Het schema maakt gebruik van custom scalars en enum types om validatie te faciliteren.
```graphql
# Custom scalar voor ID met minimale lengte
scalar IDWithMinLength
# Enum voor toegestane categorieën
enum Category {
ELECTRONICS
CLOTHING
HOME
TOYS
# Voeg meer categorieën toe indien nodig
}
# Objecttype voor User
type User {
id: IDWithMinLength!
name: String!
email: String!
}
# Objecttype voor Product
type Product {
id: IDWithMinLength!
name: String!
category: Category!
price: Float!
}
# Query type met validatie op binnenkomende query's
type Query {
getUser(id: IDWithMinLength!): User
getProduct(id: IDWithMinLength!): Product
listProducts(category: Category): [Product!]!
}
```
**Toelichting:**
- **Scalar IDWithMinLength**: Dit is een custom scalar die je in de resolvers kunt implementeren om te controleren dat de ID-waarde minimaal een bepaalde lengte heeft (bijvoorbeeld 5 tekens). Validatie gebeurt dus op serverniveau.
- **Enum Category**: Beperkt de invoer tot vooraf gedefinieerde categorieën, waardoor ongeldige waarden worden geweerd.
- **Query's**: De query's maken gebruik van deze types en scalars, zodat de validatie consistent en robuust is.
**Implementatieadvies:**
- Implementeer de custom scalar `IDWithMinLength` in je GraphQL server (bijvoorbeeld Apollo Server of een andere implementatie), waarbij je de validatie voor de minimale lengte definieert.
- Voor extra veiligheid kun je in de resolvers aanvullende checks uitvoeren op de input-waarden.
- Overweeg middleware of schema-validatie tools die je schema kunnen aanvullen met extra validatie regels.
Door deze aanpak zorg je voor een solide basis voor validatie en API-stabiliteit.
provider: deepseek
model: deepseek-chat
Hier is een basis GraphQL schema met geavanceerde query validatie in het Nederlands:
```graphql
# Basis GraphQL Schema met Geavanceerde Validatie
scalar NonEmptyID
scalar EmailAddress
scalar PositiveFloat
type User {
id: NonEmptyID!
name: String!
email: EmailAddress!
}
type Product {
id: NonEmptyID!
name: String!
category: ProductCategory!
price: PositiveFloat!
}
enum ProductCategory {
ELECTRONICS
CLOTHING
BOOKS
HOME_APPLIANCES
SPORTS
}
type Query {
getUser(id: NonEmptyID!): User
getProduct(id: NonEmptyID!): Product
getProductsByCategory(category: ProductCategory!): [Product!]!
getAllUsers: [User!]!
getAllProducts: [Product!]!
}
input UserInput {
id: NonEmptyID!
name: String!
email: EmailAddress!
}
input ProductInput {
id: NonEmptyID!
name: String!
category: ProductCategory!
price: PositiveFloat!
}
type Mutation {
createUser(input: UserInput!): User!
updateUser(id: NonEmptyID!, input: UserInput!): User!
createProduct(input: ProductInput!): Product!
updateProduct(id: NonEmptyID!, input: ProductInput!): Product!
}
```
**Validatie Implementatie Details:**
1. **NonEmptyID Scalar**:
- Minimale lengte: 3 karakters
- Alfanumerieke karakters en underscores
- Validatie op server-side
2. **EmailAddress Scalar**:
- RFC-compliant email validatie
- Domein validatie
- MX-record verificatie optioneel
3. **PositiveFloat Scalar**:
- Alleen positieve getallen
- Decimalen toegestaan
- Maximum waarde limieten
4. **ProductCategory Enum**:
- Vooraf gedefinieerde categorieën
- Uitbreidbaar voor nieuwe categorieën
- Case-sensitive validatie
**Aanbevolen Server-side Validatie Regels:**
```javascript
// Voorbeeld validatie regels (conceptueel)
const validationRules = [
// ID validatie
(context) => ({
Field(node) {
if (node.name.value === 'id') {
const value = node.value.value;
if (value.length < 3) {
context.reportError(new GraphQLError('ID moet minimaal 3 karakters bevatten'));
}
}
}
}),
// Query complexiteit limiet
(context) => ({
Document(node) {
const complexity = calculateComplexity(node);
if (complexity > 1000) {
context.reportError(new GraphQLError('Query te complex'));
}
}
})
];
```
**Beveiligingsmaatregelen:**
- Query depth limiting
- Query complexity analysis
- Rate limiting per client
- Input sanitization
- Maximum query size beperking
Dit schema biedt robuuste validatie door:
- Custom scalars voor type-safe validatie
- Enum restricties voor categorieën
- Server-side validatie regels
- Query complexiteit controle
- Duidelijke foutmeldingen voor ontwikkelaars
De validatie voorkomt veelvoorkomende aanvallen en zorgt voor API stabiliteit door inconsistente query's te blokkeren voordat ze worden uitgevoerd.