Feature Flag Service Tutorial · Module 02 of 10

Core API & Evaluation

Build the feature flag API: create, read, update, and delete flags. Implement flag evaluation logic to check if a flag is enabled for a given context. Support multiple flag types: boolean (on/off), percentage-based rollout, and rule-based targeting.

~4–5 hrsIntermediateAPI focus
← Back to Module 02 overview
What You'll Have at the End

Definition of Done

  • POST /flags — create a new flag (on/off, percentage, or rules).
  • GET /flags — list all flags with pagination.
  • GET /flags/:id — get a single flag with its rules.
  • PATCH /flags/:id — update flag status or rules.
  • DELETE /flags/:id — delete a flag.
  • POST /flags/:id/evaluate — evaluate if flag is enabled for a context.
  • Flag evaluation logic: status (off/on), percentage rollout, rule-based targeting.
  • Audit logging: all flag changes tracked.
The Steps

Build It

STEP 1

Create flag types

Create src/types/flag.ts:

export interface Flag {
  id: string;
  name: string;
  description?: string;
  status: 'off' | 'on' | 'percentage' | 'rules';
  percentage_enabled: number;
  created_at: string;
  updated_at: string;
}

export interface FlagRule {
  id: string;
  flag_id: string;
  priority: number;
  rule_type: 'segment' | 'user_attribute' | 'percentage';
  rule_value: Record;
  enabled: boolean;
  created_at: string;
  updated_at: string;
}

export interface EvaluationContext {
  user_id?: string;
  session_id?: string;
  attributes?: Record;
  segment?: string;
}

export interface EvaluationResult {
  flag_name: string;
  enabled: boolean;
  evaluated_rule_id?: string;
  reason: string; // "off", "on", "percentage", "rule_matched", "rule_not_matched"
}