Rest Services In MDriven
(Replacing message template with parser tag)
 
(47 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 [[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: [[OCLOperators RestGet]]
Line 12: Line 13:
Read: [[OCLOperators RestDownload]]
Read: [[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 [[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.
 
If there is an error – a string “error: <message>”  is returned.
 
===== 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|2024}}

Latest revision as of 07:55, 17 June 2024

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 the ViewModels you want to allow Rest access to.

Calling Existing REST Services

MDriven supports a couple of EAL operators to manage REST services. All operators reside on the selfVM variable which is available only in the ViewModel context.

selfVM.RestGet(targeturl,user,pwd,optionalnestingwithheaders)

Read: OCLOperators RestGet

selfVM.RestPost(targeturl,user,pwd,optionalnestingwithheadersAndUploadValues)

Read: OCLOperators RestPost

selfVM.RestDownload(targeturl,user,pwd,optionalnestingwithheaders)

Read: OCLOperators RestDownload

Note! optionalnestingwithheaders is the name of the blue ViewModel class in the example below (as an OCL String).

Example

2018-05-29 10h31 45.png

The action GetExporttest retrieves data by converting another ViewModel to XML - it stores it in the variable vText.

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 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.

See also: Exposing Ourselves as a REST Service

This page was edited 95 days ago on 06/17/2024. What links here