2012-03-20 23 views
21

Tôi đang cố gắng thực hiện dịch vụ web JSON Restful trong C/C++. Tôi đã thử Axis2/C và Staff, hoạt động tốt cho việc tuần tự hóa/deserialization XML nhưng không phải cho JSON.Cách để triển khai dịch vụ RESTful JSON trong C/C++

+6

Câu hỏi hay nhưng xin lời khuyên của tôi: Nếu bạn có thể làm dịch vụ web này bằng Java (hoặc các dịch vụ web hướng tới thân thiện với khuôn khổ khác) - hãy làm. Lộn xộn với những thứ cấp thấp mà C++ cung cấp là rất tốt cho việc học, nhưng nó sẽ làm chậm bạn xuống trong hầu hết các trường hợp. – Poni

+0

Poni có một điểm. Ngay cả khi bạn "dịch vụ Java" của riêng bạn, (sử dụng, nói, Jetty và Gson), bạn có thể nhận được một cái gì đó đơn giản trong một vài giờ, tôi đã tìm thấy. Có thể có các khuôn khổ ngoài đó làm tất cả các công cụ servlet cho bạn, nhưng không có gì ngay lập tức xuất hiện trong đầu bạn. – Tom

+1

@poni và Tom. Tốc độ, nếu tôi muốn viết một khuôn khổ json và muốn nó được nhanh chóng máu? Sẽ không c \ c + + là một ý tưởng tốt? – gideon

Trả lời

3

Bạn có thể xem ffead-cpp. Ngoài việc cung cấp hỗ trợ cho các dịch vụ web json và restfull nó cũng bao gồm nhiều tính năng hơn. Khuôn khổ này có thể quá nặng đối với tình huống của bạn.

1

JIRA project giải quyết sự hỗ trợ của JSON trong AXIS2/C.
Tôi đã thực hiện trong dự án của mình và tôi đã quản lý với nhà văn (hội nghị Badgerfish) nhưng tôi vẫn cố gắng quản lý với người đọc.
Dường như việc quản lý phức tạp hơn với ngăn xếp trong bộ nhớ.

+0

Thực sự, nó không được giải quyết. Độ phân giải "Sẽ không khắc phục". Đó là bởi vì bản vá này: 1) cho cũ Axis2/C-1.3, 2) rất không ổn định và không hoạt động chút nào, 3) Chỉ dành cho cửa sổ. – loentar

3

Hãy thử ngrest. Đó là khung công tác JSON Web Services JSON đơn giản nhưng fast C++. Nó có thể được triển khai trên đầu trang của Apache2, Nginx hoặc sở hữu máy chủ http đơn giản.


Về Axis2/C với JSON. Có vẻ như Axis2/C chính thức không còn được duy trì nữa. Vì vậy, Axis2/C trở nên lỗi thời (nhưng vẫn hoạt động).

Hỗ trợ JSON cho Axis2/C có sẵn trong dự án axis2c-unofficial.

Có hướng dẫn cài đặt về cách cài đặt Axis2/C với hỗ trợ JSON theo Linux, Windows using binary package, Windows from source code.

Bạn có thể dùng thử với Nhân viên WSF bằng cách sử dụng ví dụ Khách hàng (REST) ​​ở chế độ JSON (có sẵn từ thư mục mã nguồn nhân viên staff/samples/rest/webclient).

1

JSON và JSONPath được hỗ trợ cho cả C và C++ trong gsoap với code generator and a new JSON API mới để giúp bạn bắt đầu nhanh chóng.

Một số JSON, JSON-RPC and REST examples được bao gồm. Quản lý bộ nhớ là tự động.

Trình tạo mã có thể hữu ích. Lấy ví dụ đoạn json.org menu.json:

{ "menu": { 
    "id": "file", 
    "value": "File", 
    "popup": { 
     "menuitem": [ 
     {"value": "New", "onclick": "CreateNewDoc()"}, 
     {"value": "Open", "onclick": "OpenDoc()"}, 
     {"value": "Close", "onclick": "CloseDoc()"} 
     ] 
    } 
    } 
} 

Lệnh gsoap jsoncpp -M menu.json tạo mã này để cư một giá trị JSON:

value x(ctx); 
x["menu"]["id"] = "file"; 
x["menu"]["value"] = "File"; 
x["menu"]["popup"]["menuitem"][0]["value"] = "New"; 
x["menu"]["popup"]["menuitem"][0]["onclick"] = "CreateNewDoc()"; 
x["menu"]["popup"]["menuitem"][1]["value"] = "Open"; 
x["menu"]["popup"]["menuitem"][1]["onclick"] = "OpenDoc()"; 
x["menu"]["popup"]["menuitem"][2]["value"] = "Close"; 
x["menu"]["popup"]["menuitem"][2]["onclick"] = "CloseDoc()"; 

Cũng đọc giá trị JSON phân tích cú pháp và mã JSONPath có thể được tạo ra bởi công cụ này.

EDIT

Để làm rõ, các jsoncpp dòng lệnh mã máy phát điện cho thấy mã API để đọc và ghi dữ liệu JSON bằng cách sử dụng một tập tin .json làm mẫu, mà tôi tìm thấy rất hữu ích để tiết kiệm thời gian để viết mã API để điền và trích xuất dữ liệu JSON. Mã truy vấn JSONPath cũng có thể được tạo bằng công cụ này.

2

Đối với C++ dịch vụ web, tôi đang sử dụng ngăn xếp như sau:

Các vấn đề liên quan