Làm cách nào để dịch truy vấn SQL thành các yêu cầu API REST?


8

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ỉ SELECTcá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.departmenttrong 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:

  1. /persons?query=firstname==Chuck;lastname==Norris
  2. Nhận userNametừ kết quả
  3. /projects/{userName}?fields=name&query=state==ACTIVE

2
Tôi chỉ tò mò, bạn đang phát triển cái gì? ;)
Jakub Jiruska

@JakubJiruska Tôi đang cố gắng xây dựng giao diện ngôn ngữ tự nhiên cho cơ sở dữ liệu (NLIDB) trên KOSapi. Trên thực tế, tôi sẽ liên lạc với bạn về các chi tiết về RSQL, vì vậy tôi có thể cung cấp thêm thông tin về dự án của mình, nếu bạn quan tâm.
Jakub Stejskal

Ở đầu câu hỏi, bạn nói rằng các truy vấn của người dùng sẽ bằng SQL hoặc một ngôn ngữ truy vấn tương tự, nhưng ví dụ của bạn là "tên của các dự án đang hoạt động của Chuck Norris". Đây có phải là một ví dụ thực tế về những gì bạn phải phân tích?
Mike Partridge

Một cái gì đó giống như một tệp XML nên được sử dụng để ánh xạ các cuộc gọi REST tới SQL. Đối với ví dụ gist.github.com/d3ep4k/7da96e35bf778e69c53d
Sorter

Câu trả lời:


1

Về mặt kỹ thuật, ngôn ngữ truy vấn chỉ là một tiêu chuẩn khác mà dịch vụ REST nên hiểu. Nó không cần bản đồ để truy vấn params. Ví dụ bằng Hydra, có thể định nghĩa một tham số truy vấn duy nhất có chứa ví dụ SQL. Tất cả những gì bạn cần là một vocab trong đó bạn có thể mô tả các SQL và một máy khách có thể xây dựng SQL và một máy chủ có thể hiểu SQL. Các vocab phổ biến là hợp đồng giữa máy khách và máy chủ trong trường hợp này. Một số nói về điều này. Vì vậy, bạn không phải tạo ngôn ngữ truy vấn riêng, bạn có thể sử dụng lại mọi ngôn ngữ truy vấn hiện có ...

WADL và các ngôn ngữ mô tả REST khác là một khởi đầu tồi, bởi vì REST có giao diện / HATEOAS thống nhất ràng buộc rằng các máy khách phải sử dụng các siêu liên kết để thay đổi trạng thái của chúng. Các khách hàng nên quyết định chọn siêu liên kết nào bằng cách kiểm tra ngữ nghĩa của chúng. Siêu dữ liệu liên kết (ví dụ: quan hệ liên kết) chứa ngữ nghĩa đó ... Bởi các ngôn ngữ như WADL không có liên kết, siêu dữ liệu liên kết hoặc ngữ nghĩa và do đó, máy khách REST không thể được sử dụng lại, do không được tách rời khỏi dịch vụ REST. :S

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.