API Design

📖 1 min read 📄 Part 5 of 10

Distributed Locking System - API Design

API Overview

Core Lock Operations

AcquireLock(path, timeout, options)
ReleaseLock(path, fencing_token)
TryLock(path, options)
RenewLock(path, fencing_token, duration)

REST API Endpoints

Acquire Lock

POST /api/v1/locks/{path}/acquire
Content-Type: application/json

{
  "session_id": "sess_abc123",
  "timeout_ms": 30000,
  "wait": true,
  "lock_type": "exclusive"
}

Response 200:
{
  "acquired": true,
  "fencing_token": 12345,
  "expires_at": "2024-01-03T19:31:00Z"
}

Release Lock

POST /api/v1/locks/{path}/release
Content-Type: application/json

{
  "session_id": "sess_abc123",
  "fencing_token": 12345
}

Response 200:
{
  "released": true
}

gRPC Service Definition

service LockService {
  rpc AcquireLock(AcquireLockRequest) returns (AcquireLockResponse);
  rpc ReleaseLock(ReleaseLockRequest) returns (ReleaseLockResponse);
  rpc TryLock(TryLockRequest) returns (TryLockResponse);
  rpc RenewLock(RenewLockRequest) returns (RenewLockResponse);
  rpc CreateSession(CreateSessionRequest) returns (CreateSessionResponse);
  rpc Heartbeat(HeartbeatRequest) returns (HeartbeatResponse);
}

Client Library Example (Python)

from distributed_lock import LockClient

client = LockClient(servers=['node1:2379', 'node2:2379'])

# Acquire lock
with client.lock('/app/resource', timeout=30):
    # Critical section
    process_data()
    
# Lock automatically released

# Leader election
with client.elect_leader('/app/leader'):
    # I am the leader
    perform_leader_duties()

This API design provides simple, intuitive interfaces for distributed locking with strong consistency guarantees.