|
|
(46 intermediate revisions by 6 users not shown) |
Line 1: |
Line 1: |
| '''REST services''' are services that are executed by connecting to an URL that defines operation and parameters then it returns an answer – not seldom as JSon objects. | | <message>Write the content here to display this box</message> |
| | '''REST Services''' are services executed by connecting to a URL that defines operation and parameters and returns an answer – not seldom as JSON objects. |
|
| |
|
| You must set the tagged value '''RestAllowed''' on ViewModels you want to allow Rest access to. | | You must set the tagged value '''RestAllowed''' on the ViewModels you want to allow Rest access to. |
|
| |
|
| === '''Calling existing REST services''' === | | === '''Calling Existing REST Services''' === |
| MDriven supports a couple of EAL operators to manage REST services. All operators reside on the [[selfVM]] variable – available only in the ViewModel context. | | MDriven supports a couple of EAL operators to manage REST services. All operators reside on the [[Documentation:SelfVM|selfVM]] variable which is available only in the ViewModel context. |
| ''selfVM.RestGet(targeturl,user,pwd,optionalnestingwithheaders)'' | | ''selfVM.RestGet(targeturl,user,pwd,optionalnestingwithheaders)'' |
| Read: [[OCLOperators RestGet]] | | '''Read:''' [[Documentation:OCLOperators RestGet|OCLOperators RestGet]] |
| ''selfVM.RestPost(targeturl,user,pwd,optionalnestingwithheadersAndUploadValues)'' | | ''selfVM.RestPost(targeturl,user,pwd,optionalnestingwithheadersAndUploadValues)'' |
| Read: [[OCLOperators RestPost]] | | '''Read:''' [[Documentation:OCLOperators RestPost|OCLOperators RestPost]] |
| ''selfVM.RestDownload(targeturl,user,pwd,optionalnestingwithheaders)'' | | ''selfVM.RestDownload(targeturl,user,pwd,optionalnestingwithheaders)'' |
| Read: [[OCLOperators RestDownload]] | | '''Read:''' [[Documentation:OCLOperators RestDownload|OCLOperators RestDownload]] |
|
| |
|
| '''Note!''' ''optionalnestingwithheaders'' is the '''name''' of the blue view model class in the example below (as a OCL String). | | '''Note!''' ''optionalnestingwithheaders'' is the '''name''' of the blue ViewModel class in the example below (as an OCL String). |
|
| |
|
| ==== Example ==== | | ==== Example ==== |
| [[File:2018-05-29 10h31 45.png|none|thumb|689x689px]] | | [[File:2018-05-29 10h31 45.png|none|thumb|689x689px]] |
| The action '''GetExporttest''' retrieves data by converting another viewmodel to xml - it stores it in the variable vText | | The action '''GetExporttest''' retrieves data by converting another ViewModel to XML - it stores it in the variable <code>vText</code>. |
|
| |
|
| Next action invokes RestPost to send that data to an url-address, it also says that it should look at the nesting named 'Xml' - in this nesting we have the STRINGCONTENT (see also [[OCLOperators RestPost]]) which get's it's content from the vText variable - we also add the header Authorization with a bearer token in order to get access from the receiving service.
| | The next action invokes RestPost to send that data to a URL address; it also says it should look at the nesting named 'Xml'. In this nesting, we have the STRINGCONTENT ('''see also''' [[Documentation:OCLOperators RestPost|OCLOperators RestPost]]) which gets its content from the vText variable. We also add the header Authorization with a bearer token to get access from the receiving service. |
| | |
| === Exposing ourselves as a REST service ===
| |
| And when it comes to '''exposing ourselves to others''' – Turnkey has two MVC verbs, Get and Post, like this;
| |
| TurnkeyRest/Get?command=vmname&id=rootobjref
| |
|
| |
| TurnkeyRest/Post?command=vmname&id=rootobjref
| |
| The ViewModel name is supplied as the '''command''' parameter.
| |
| | |
| The '''id''' parameter is an object reference in one of several available formats. Read more [[The ExternalId explained|here]] about how to create these.
| |
| | |
| ===== The commands does this; =====
| |
| We check that the tagged value '''RestAllowed''' has been set on the viewmodel, then we look up the root object.
| |
| | |
| When the viewmodel and it's root has been found and the [http://wiki.mdriven.net/index.php/Part_9_MDriven_Turnkey,_cloud_tools_and_access_groups accessgroups] are checked to see if access is allowed.
| |
| | |
| Then additional parameters are set (these can be either URL Encoded or multi-part form encoded. [https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST See HTTP POST] for details).
| |
| * For Get, the parameter names are looked up against ViewModel variables and variable values are set.
| |
| * For Post, the parameter names are looked up against ViewModel variables '''and''' '''attributes''' and values are set.
| |
| Then any actions present at the root level of the ViewModel are executed, ''in the order presented in the viewmodel'' from top to bottom.
| |
| * For Get, use the actions to look up additional information.
| |
| * For Post, the actions are usually used to process sent JSON data into objects (see below)
| |
| Post saves any changed values to the database.
| |
| | |
| Both Get and Post returns the viewmodel content as JSON in the HTTP response. To override this add a string attribute named exactly RawJSon on the root - if found this is returned instead of the complete vm as json.
| |
| | |
| If there is an error – a string “error: <message>” is returned.
| |
| | |
| If you need to receive post data not known at design time please read [[Receive post data not known at design time]].
| |
| | |
| ===== Processing JSON into objects =====
| |
| If you want to send data as JSON in a POST you need to apply the JSON string to your systems modelled objects.
| |
| | |
| Use [[Tajson]] or the simpler JsonToObjects. Read more here on XML or JSON support: [[Import xml and JSon with MDriven]]
| |
| | |
| The selfVM.JSonToObjects creates objects with the root in a of class and matches attributes and association from the JSON data – and it can create object trees (unclosed graphs) by following names on associations.
| |
| selfVM.JSonToObjects( «<Type>» , JSonDataInStringFormat)
| |
| === Video ===
| |
| | |
| <html>
| |
| <p class="warn">
| |
| <em>To make your experience more comfortable, we set the main tags mentioned in the video to the right bar menu of this mini
| |
| player. Choose the interesting subtitle on the list and immediately get to the exact theme navigation-itemplace in the
| |
| video. Now you can pick any topic to be instructed without watching the whole video.</em>
| |
| </p>
| |
| <br>
| |
| <div class="video">
| |
| <div class="video__wrapper">
| |
| <iframe src="https://www.youtube.com/embed/rv31ziYXWME?rel=0&autoplay=0" frameborder="0" allowfullscreen></iframe>
| |
| </div>
| |
| <div class="video__navigation">
| |
| <span class="navigation-item" data-video="rv31ziYXWME" data-start="10" tabindex="0"> What is REST? </span>
| |
| <span class="navigation-item" data-video="rv31ziYXWME" data-start="82" tabindex="0"> How does it work with MDriven turnkey? </span>
| |
| <span class="navigation-item" data-video="rv31ziYXWME" data-start="125" tabindex="0"> calling an existing REST service </span>
| |
| <span class="navigation-item" data-video="rv31ziYXWME" data-start="191" tabindex="0"> exposing ourself as REST service </span>
| |
| | |
| <span class="navigation-item" data-video="rv31ziYXWME" data-start="244" tabindex="0"> MDriven turnkey app slot </span>
| |
| <span class="navigation-item" data-video="rv31ziYXWME" data-start="333" tabindex="0"> how to expose information as the Rest service? </span>
| |
| <span class="navigation-item" data-video="rv31ziYXWME" data-start="450" tabindex="0"> MDriven Rest/get strategy </span>
| |
| | |
| <span class="navigation-item" data-video="rv31ziYXWME" data-start="573" tabindex="0"> how to consume data? </span>
| |
| | |
| <span class="navigation-item" data-video="rv31ziYXWME" data-start="680" tabindex="0"> selfvm </span>
| |
| <span class="navigation-item" data-video="rv31ziYXWME" data-start="716" tabindex="0"> Rest/Get operator </span>
| |
| <span class="navigation-item" data-video="rv31ziYXWME" data-start="925" tabindex="0"> hard-coded objects </span>
| |
| | |
| <span class="navigation-item" data-video="rv31ziYXWME" data-start="1336" tabindex="0"> Json to objects operator </span>
| |
| <span class="navigation-item" data-video="rv31ziYXWME" data-start="1784" tabindex="0"> update data with allow post </span>
| |
| | |
| <span class="navigation-item" data-video="rv31ziYXWME" data-start="1898" tabindex="0"> RestPost operator as a post command </span>
| |
| <span class="navigation-item" data-video="rv31ziYXWME" data-start="2490" tabindex="0"> operation execution</span>
| |
| <span class="navigation-item" data-video="rv31ziYXWME" data-start="2558" tabindex="0"> vSomeParam adding new parameters </span>
| |
| | |
| | |
| </div>
| |
| </div>
| |
| | |
| </html>
| |
|
| |
|
| | '''See also''': [[Documentation:Exposing Ourselves as a REST Service|Exposing Ourselves as a REST Service]] |
| [[Category:Rest]] | | [[Category:Rest]] |
| [[Category:Advanced]] | | [[Category:Advanced]] |
| | {{Edited|July|12|2025}} |