Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Lập trình Web & Backend] VERSION: Khóa lạc quan với ETag (412)

    REST — Optimistic locking (ETag / version)

    Để tránh ghi đè mất dữ liệu, mỗi bản ghi có version (bắt đầu 1). Client gửi PUT <id> <ver> <name> kèm version đang giữ. Nếu ver khớp version hiện tại → cập nhật, tăng version, trả 200. Nếu không khớp → 412 Precondition Failed (ai đó đã sửa trước). Không tồn tại → 404.

    Ví dụ I/O

    Input:

    CREATE a
    PUT 1 1 b
    PUT 1 1 c
    

    Output:

    {"status":200,"item":{"id":1,"name":"b","version":2}}
    {"status":412,"error":"Precondition Failed"}
    
    • Định dạng đầu vào:

      Mỗi dòng CREATE <name> hoặc PUT <id> <ver> <name>.

    • Ràng buộc đầu vào:

      Số lệnh ≤ 300.

    • Định dạng đầu ra:

      PUT khớp version in {"status":200,"item":{"id":..,"name":..,"version":..}}; sai version in {"status":412,"error":"Precondition Failed"}; không có id in 404.

    Ví dụ:

    Đầu vào:

    CREATE a
    PUT 1 1 b
    PUT 1 1 c
    

    Đầu ra:

    {"status":200,"item":{"id":1,"name":"b","version":2}}
    {"status":412,"error":"Precondition Failed"}

    Giải thích:

    PUT đầu khớp version 1 → cập nhật, version thành 2; PUT sau vẫn gửi version 1 nên 412.

    Đang tải editor...