Giả sử tôi có một mô tả có thể đọc được bằng máy (như trong WADL , Swagger hoặc RAML ) của API REST cung cấp giao diện cho cơ sở dữ liệu.
Người dùng của tôi gửi truy vấn về cơ sở dữ liệu cơ bản dưới dạng SQL hoặc ngôn ngữ truy vấn tương tự. Tuy nhiên, tôi không thể truy cập cơ sở dữ liệu trực tiếp, chỉ thông qua API REST.
Cách tiếp cận nào bạn sẽ chọn để xây dựng (tốt nhất là bán tự động từ mô tả) một hệ thống chuyển các truy vấn SQL đó thành một chuỗi các yêu cầu sang API REST đã cho?
Làm thế nào bạn sẽ đại diện cho vấn đề như vậy? Có bất kỳ thuật toán, khung lý thuyết hoặc công cụ có thể giúp đỡ?
API REST hỗ trợ:
- các hoạt động chỉ đọc, tức là chỉ
SELECT
các truy vấn SQL - Các phép chiếu XPartial (ví dụ
/persons?fields=firstname,lastname
) - Các ràng buộc RSQL (
/persons?query=firstname==John;department.code==42
, xem các ví dụ khác ).
Một số tham chiếu giữa các bảng (khóa ngoài) được biểu diễn dưới dạng các thuộc tính trong API REST (chẳng hạn như Person.department
trong ví dụ ràng buộc ở trên), nhưng một số tham chiếu được biểu diễn dưới dạng nguồn con (ví dụ /persons/{userName}/projects
). Điều này có nghĩa là một số truy vấn yêu cầu đưa ra "kế hoạch" để được trả lời theo các yêu cầu REST.
Ví dụ: Truy vấn "tên các dự án đang hoạt động của Chuck Norris" sẽ dịch thành:
/persons?query=firstname==Chuck;lastname==Norris
- Nhận
userName
từ kết quả /projects/{userName}?fields=name&query=state==ACTIVE