我不認爲這是可能的自動,至少不是沒有AI。
首先,您必須將每個操作名稱拆分爲兩部分:具有IRI和VERB的資源。
例如:
GetLastTradePrice
將至少GET /lastTradePrice
或與另外的變換GET tradePrices/last
Hello
將GET /greeting?name="{name}"
CreateUser
,GetUserName
,DeleteUserById
將POST /users
,GET /users/{id}?fields="name"
,DELETE /users/{id}
如果你想有很好的IRI來調試你的路由器,並鏈接建設者服務器端,那麼你需要一個嚴格的概念或AI來做到這一點。如果不是那麼你的運氣,IRI結構並不重要,所以你可以使用/resources/{id}
爲每個資源。例如/users
可以是/resources/static:1
和/users/123
可以是/resources/123
。如果每個資源在您的系統中都有一個唯一的ID。如果不是,那麼你必須使用獨特的子類別,例如/resources/avz5ag6u:123
。如果沒有AI,或在您的SOAP服務的一些嚴格的命名概念,你將無法通過POST
重用的IRI像/users
,GET
,或/users/{id}
通過PUT
,GET
,DELETE
,但由於通過REST每個資源都可以不是一個悲劇有多個IRIs。請注意它們是獨特的...
問題是與這些鏈接的含義部分(VERB + IRI)。通過REST,您可以導航檢查與鏈接相關的元數據,例如IANA link relations與vendor specific MIME types,由HAL或rdf:Property
s描述的自定義RDF vocab由Hydra(如果我們正在討論REST JSON ofc)。我認爲可以從XSD
中生成參數和返回值驗證/描述部分,但是您的鏈接元數據將很困難。爲此你需要一個AI。如果你很幸運,你的SOAP服務已經提供了一些RDF信息,通過這樣的服務,我認爲自動映射是可能的,否則我不這麼認爲,反正這將是一項艱鉅的工作。您將無法調試或改進生成的服務,因爲路由將使用匿名IRI或IRI模板。
因此在大多數情況下,不可能完全自動完成此操作。您需要一些嚴格的操作命名概念和/或現有的RDF描述到您的SOAP服務。即使如此,我認爲編寫REST服務生成器也是一項艱鉅的任務。沒有這些,你必須做一些或更多的手動工作,比如用REST特定的東西來註釋你的SOAP服務,或者在你的WSDL文件中寫入一些REST特有的屬性,並使用它們來生成REST服務。現在這是這份工作的一部分。
另一部分是重用SOAP服務的業務邏輯。如果您的中心佈局像乾淨,洋蔥或六角形/端口&適配器,那麼應該很容易爲REST交付或端口添加新的適配器。如果你不使用這樣的體系結構,那麼你必須手動編寫整個REST服務或神級REST適配器。
在我看來寫一個SOAP - > REST生成器不值得。手動編寫REST服務更容易。