Tôi muốn hiển thị API REST trên ứng dụng của mình, sử dụng máy chủ web Mongoose và cung cấp trình xử lý cho các truy vấn khác nhau.Truy vấn REST phân tích cú pháp trong C++
Một ví dụ về truy vấn sẽ là như thế này (tôi chỉ sử dụng GET cho thời điểm này, phần còn lại của động từ HTTP sẽ đến sau):
GET /items -> returns a list of all items in JSON
GET /item/by/handle/123456789 -> returns item that has handle 123456789
GET /item/by/name/My%20Item -> returns item(s) that have the name "My Item"
gì tôi tò mò là làm thế nào tôi nên thực hiện phân tích các truy vấn này. Tôi có thể dễ dàng phân tích cú pháp đầu tiên, vì nó chỉ đơn giản là một vấn đề của if(query.getURI() == "/items") return ...
.
Nhưng đối với hai truy vấn tiếp theo, tôi phải thao tác các chuỗi std::
theo một cách hoàn toàn khác, sử dụng một số phép thuật và bù trừ std::string::find()
để nhận được đối số.
Như một ví dụ, đây là việc thực hiện Tôi có cho truy vấn thứ hai:
size_t position = std::string::npos;
std::string path = "/item/by/handle/";
if((position = query.getURI().find(path)) != std::string::npos)
{
std::string argument = query.getURI().substr(position + path.size());
// now parse the argument to an integer, find the item and return it
}
gì nếu tôi muốn "templatize" này; nghĩa là: Tôi mô tả đường dẫn và các đối số mà tôi mong đợi sau đó (một số nguyên, một chuỗi, ....); và mã được tạo tự động để xử lý việc này?
Tl; TS: Tôi muốn để có thể xử lý các truy vấn REST trong C++ với một cái gì đó dọc theo những dòng:
registerHandler("/item/by/handle/[INTEGER]", myHandlerMethod(int));
Đây có phải là có thể?
Có vẻ như bạn cần cụm từ thông dụng, như được tìm thấy trong tăng hoặc C++ 11. –