假設我從運行Tomcat的服務器獲得遠程JAX-RS JSON API。我想從C/C++客戶端訪問這個API。是否有任何工具可用於使C/C++客戶端的生活更輕鬆,例如代碼生成器?還是有人有一個替代的建議?我可以爲JAX-RS JSON API生成C/C++客戶端嗎?
回答
我從來沒有聽說過這樣的工具。更重要的是,我懷疑這樣的工具(用於JSON的C/C++生成器)是不切實際的。
原因有很多。一些最重要的是:
一個關鍵問題是JSON沒有模式。這意味着API生成器將不得不求助於查看示例消息並嘗試推斷期望的字段以及它們的類型。在某些情況下,這可能很困難,甚至在理論上也是不可能的在諸如Java和C#等語言中,有直接的「正確方法」來生成對象API;例如JavaBeans約定。在C++中,特別是C中,約定不存在,並且存在諸如容器協議和內存管理等複雜問題。
像Java和C#這樣的語言是運行時類型安全的,並且提供了各種語言級別的機制,允許您使用動態編程來處理JSON的無模式性質。例如,在Java中,您有反射,代理類,動態代碼生成和動態代碼加載,所有這些都可以幫助處理JSON。在C和C++中,這些機制通常不可用。
簡而言之,如果您使用的是C或C++,那麼JSON庫就像它將得到的一樣好。
隨訪
正如評論指出,這可能是基於JAX-RS 具體服務器實現的上下文中是可行的。您需要掌握內部元數據,應用JSON映射,並從中生成C/C++ API。問題是:
- 生成器實現將是平臺特定的。
- 基於C/C++的客戶端將無法應對有效模式的更改,而無需重新生成API和相應的客戶端代碼更改。(相比之下,基於JSON庫的解決方案理論上可以編碼來處理意外的新屬性等)
- 您仍然有處理容器/內存管理問題。
你需要的是你選擇發送和接收http請求的庫以及一個json解析器。沒有什麼東西會產生代碼來讓你更容易,因爲這樣的API的想法是它吐出了JSON。 JSON的要點是以一致的方式跨越語言和交通障礙。有點像XML,但更簡單。
這個問題可能會對你感興趣:what's the best json parser? JSON Spirit看起來像一個特別好的文章。
現在,當您使用REST時,您需要的只是與正確的URL進行通信。完成。
你想決定的最後一件事是用於網絡通信的庫。我敢肯定,Boost會是很多人的推薦。
我知道JSON是什麼,它有庫,但我不想寫所有的樣板代碼,將它解析到C/C++結構體/類中。當有新的班級或領域時,我也不想再改變一切。這就是我尋找自動化解決方案的原因。 – FelixM 2010-12-17 22:24:46
- 1. 我可以使用Multipart參數生成Spring Feign客戶端嗎?
- 2. Apiary:將API導出爲JSON,生成客戶端代碼
- 3. 在Websphere Liberty Profile中使用JAXRS客戶端API(POST請求)的Http客戶端
- 4. 我可以使用Fetch在客戶端調用Twitter API嗎?
- 5. 如何在客戶端上生成JSON
- 6. Flex應用程序可以成爲Websockets客戶端嗎?
- 7. Windows託管服務可以成爲wcf客戶端嗎?
- 8. 爲REST生成客戶端對象
- 9. Docpad可以生成一個可以被客戶端JavaScript框架使用的json文件嗎?
- 10. 我可以使用某些客戶端JavaScript API服務器端嗎?
- 11. 生成Expressjs API作爲客戶端爲同構web的方法
- 12. JAVA | CXF JAXRS非Spring客戶端
- 13. 我們可以使用JAX-WS爲TIBCO生成Web服務客戶端
- 14. 如何爲swagger生成java客戶端代碼REST API文檔
- 15. 我可以通過服務器實現客戶端 - 客戶端通信嗎?
- 16. 爲Flask測試客戶端生成URL
- 17. 爲Spring Controller自動生成客戶端
- 18. Swagger客戶端生成
- 19. 生成客戶端事件
- 20. 從json字段爲jQuery Grid生成URL客戶端?
- 21. 我的html標記應該在客戶端生成嗎?
- 22. 身份2.0 Web API爲客戶端生成令牌
- 23. XPages:生成JSON服務器端,使用客戶端
- 24. 客戶端或後端的CSV生成?
- 25. sencha touch pdf生成表格客戶端
- 26. 動態CRM Outlook客戶端修改 - 可以完成嗎?
- 27. 可以將Jersey-Json/Jackson配置爲生成json-rpc-1.0嗎?
- 28. 客戶端生成的控件是否可以影響ViewState?
- 29. 使用Twilio,我可以在我的帳戶上爲使用API的客戶端創建號碼嗎?
- 30. 我可以通過GA API訪問唯一的客戶端ID嗎?
如果你只考慮JSON,我相信你是正確的。不過,我相信在JAX-RS中將會有一個基於Java的模式,從中可以用另一種語言生成值對象。我認爲這個問題更多的是如果有人已經做到了。 JBoss RestEasy聲稱他們提供了Java中的某些東西。 – FelixM 2010-12-18 17:06:08