Skip to content

Latest commit

 

History

History
323 lines (244 loc) · 8.54 KB

File metadata and controls

323 lines (244 loc) · 8.54 KB

RESTful API with Authentication - Requirements

Example Spec demonstrating API feature development


Version: 1.42.0
Last Updated: 2026-02-11
Spec Type: Example - API Feature


Overview

This Spec demonstrates how to structure requirements for a RESTful API feature. We'll build a simple task management API with JWT authentication, covering common API patterns like CRUD operations, authentication, authorization, and error handling.

Learning Points:

  • API endpoint design
  • Authentication and authorization
  • Request/response formats
  • Error handling
  • API versioning

User Stories

US-1: User Registration

As a new user
I want to register an account with email and password
So that I can access the task management system

Acceptance Criteria:

  • WHEN I POST to /api/v1/auth/register with valid email and password THEN I receive a success response with user ID
  • WHEN I register with an existing email THEN I receive a 409 Conflict error
  • WHEN I register with invalid email format THEN I receive a 400 Bad Request error
  • WHEN I register with password < 8 characters THEN I receive a 400 Bad Request error

US-2: User Login

As a registered user
I want to log in with my credentials
So that I can access my tasks

Acceptance Criteria:

  • WHEN I POST to /api/v1/auth/login with valid credentials THEN I receive a JWT token
  • WHEN I login with invalid credentials THEN I receive a 401 Unauthorized error
  • WHEN I login successfully THEN the token expires after 24 hours
  • WHEN I use an expired token THEN I receive a 401 Unauthorized error

US-3: Create Task

As an authenticated user
I want to create a new task
So that I can track my work

Acceptance Criteria:

  • WHEN I POST to /api/v1/tasks with valid token and task data THEN I receive the created task with ID
  • WHEN I create a task without authentication THEN I receive a 401 Unauthorized error
  • WHEN I create a task with missing required fields THEN I receive a 400 Bad Request error
  • WHEN I create a task successfully THEN it's associated with my user ID

US-4: List Tasks

As an authenticated user
I want to view all my tasks
So that I can see what I need to do

Acceptance Criteria:

  • WHEN I GET /api/v1/tasks with valid token THEN I receive a list of my tasks
  • WHEN I list tasks without authentication THEN I receive a 401 Unauthorized error
  • WHEN I have no tasks THEN I receive an empty array
  • WHEN I have multiple tasks THEN they are sorted by creation date (newest first)

US-5: Update Task

As an authenticated user
I want to update a task's details
So that I can modify task information

Acceptance Criteria:

  • WHEN I PUT /api/v1/tasks/:id with valid token and data THEN the task is updated
  • WHEN I update another user's task THEN I receive a 403 Forbidden error
  • WHEN I update a non-existent task THEN I receive a 404 Not Found error
  • WHEN I update with invalid data THEN I receive a 400 Bad Request error

US-6: Delete Task

As an authenticated user
I want to delete a task
So that I can remove completed or unwanted tasks

Acceptance Criteria:

  • WHEN I DELETE /api/v1/tasks/:id with valid token THEN the task is deleted
  • WHEN I delete another user's task THEN I receive a 403 Forbidden error
  • WHEN I delete a non-existent task THEN I receive a 404 Not Found error
  • WHEN I delete successfully THEN I receive a 204 No Content response

Functional Requirements

FR-1: Authentication System

The system must provide JWT-based authentication for API access.

Details:

  • Support user registration with email and password
  • Support user login with credentials
  • Generate JWT tokens with 24-hour expiration
  • Validate JWT tokens on protected endpoints
  • Hash passwords using bcrypt (10 rounds)

FR-2: Task CRUD Operations

The system must provide complete CRUD operations for tasks.

Details:

  • Create: POST /api/v1/tasks
  • Read (list): GET /api/v1/tasks
  • Read (single): GET /api/v1/tasks/:id
  • Update: PUT /api/v1/tasks/:id
  • Delete: DELETE /api/v1/tasks/:id

FR-3: Authorization

The system must enforce user-level authorization for task operations.

Details:

  • Users can only access their own tasks
  • Users cannot view, update, or delete other users' tasks
  • Return 403 Forbidden for unauthorized access attempts

FR-4: Input Validation

The system must validate all input data before processing.

Details:

  • Email: Valid email format, max 255 characters
  • Password: Minimum 8 characters, max 128 characters
  • Task title: Required, max 200 characters
  • Task description: Optional, max 2000 characters
  • Task status: Enum (pending, in_progress, completed)

FR-5: Error Handling

The system must provide consistent error responses.

Details:

  • Use standard HTTP status codes
  • Return JSON error responses with message and error code
  • Include validation errors with field-specific messages
  • Log errors for debugging

FR-6: API Versioning

The system must support API versioning for future compatibility.

Details:

  • All endpoints prefixed with /api/v1/
  • Version included in URL path
  • Support for future versions without breaking existing clients

Non-Functional Requirements

NFR-1: Performance

  • API response time < 200ms for 95% of requests
  • Support 100 concurrent users
  • Database queries optimized with indexes

NFR-2: Security

  • Passwords hashed with bcrypt
  • JWT tokens signed with secret key
  • HTTPS required in production
  • Rate limiting: 100 requests per minute per IP
  • Input sanitization to prevent injection attacks

NFR-3: Reliability

  • 99.9% uptime
  • Graceful error handling (no crashes)
  • Database transactions for data consistency

NFR-4: Maintainability

  • RESTful API design principles
  • Consistent naming conventions
  • Comprehensive API documentation
  • Unit test coverage > 80%

NFR-5: Scalability

  • Stateless API design (horizontal scaling)
  • Database connection pooling
  • Caching for frequently accessed data

API Endpoints Summary

Method Endpoint Auth Required Description
POST /api/v1/auth/register No Register new user
POST /api/v1/auth/login No Login user
POST /api/v1/tasks Yes Create task
GET /api/v1/tasks Yes List all user's tasks
GET /api/v1/tasks/:id Yes Get single task
PUT /api/v1/tasks/:id Yes Update task
DELETE /api/v1/tasks/:id Yes Delete task

Data Models

User

{
  "id": "uuid",
  "email": "string (unique)",
  "password": "string (hashed)",
  "createdAt": "timestamp",
  "updatedAt": "timestamp"
}

Task

{
  "id": "uuid",
  "userId": "uuid (foreign key)",
  "title": "string",
  "description": "string (optional)",
  "status": "enum (pending, in_progress, completed)",
  "createdAt": "timestamp",
  "updatedAt": "timestamp"
}

Error Response Format

{
  "error": {
    "code": "ERROR_CODE",
    "message": "Human-readable error message",
    "details": {
      "field": "Specific field error (for validation)"
    }
  }
}

Error Codes:

  • INVALID_INPUT - Validation error
  • UNAUTHORIZED - Authentication required
  • FORBIDDEN - Insufficient permissions
  • NOT_FOUND - Resource not found
  • CONFLICT - Resource already exists
  • INTERNAL_ERROR - Server error

Out of Scope

The following are explicitly out of scope for this Spec:

  • ❌ Password reset functionality
  • ❌ Email verification
  • ❌ OAuth/social login
  • ❌ Task sharing between users
  • ❌ Task categories or tags
  • ❌ File attachments
  • ❌ Real-time notifications
  • ❌ Admin panel

Dependencies

  • Node.js 14+ - Runtime environment
  • Express.js 4.x - Web framework
  • PostgreSQL 13+ - Database
  • jsonwebtoken - JWT implementation
  • bcrypt - Password hashing
  • express-validator - Input validation

Success Criteria

This feature is considered complete when:

  1. ✅ All 7 API endpoints are implemented and working
  2. ✅ All acceptance criteria pass
  3. ✅ Unit test coverage > 80%
  4. ✅ Integration tests cover all endpoints
  5. ✅ API documentation is complete
  6. ✅ Security requirements are met
  7. ✅ Performance requirements are met

Related Documentation


Version: 1.42.0
Last Updated: 2026-02-11
Status: Example Spec