No edit summary |
|||
Line 98: | Line 98: | ||
</ul> | </ul> | ||
Line 116: | Line 117: | ||
</script> | </script> | ||
</html> | </html> | ||
'''Raw subtitles text''' | |||
Rest services and MDriven turkey, so Rest | |||
is a very powerful simple way to access | |||
web services on the web and retrieving | |||
information from really anyone | |||
so there's a growing catalog of available | |||
web services, that deliver rest type | |||
messages just to name a few and you | |||
could get the things from Spotify to get | |||
artists or seek their catalog with | |||
resting interfaces you could call on | |||
services to upload the word documents to | |||
get the PDF in return, you could up | |||
request the email sent in your name etc | |||
so it's a very powerful way to get | |||
both information and functionality | |||
from other providers, so how does it | |||
work with MDriven turkey, well there | |||
actually two kinds of needs one kind | |||
is calling existing rest services and | |||
the other one is to expose our self as | |||
rest services, so we're going to look at | |||
both today and there's a new article out | |||
rest services and MDriven turnkey | |||
so calling an existing rest service | |||
there are new ocl operators on the selfVM class | |||
so you can call a target URL | |||
and get data back and you can post to | |||
target URL or you can download and this | |||
is the case when you have requested | |||
something bigger like a file being | |||
produced for you or something | |||
there's also a method to convert JSon | |||
that you have in a string | |||
to objects in your model | |||
so that it will be easier to work on, with the data and with the tools | |||
you know from MDriven designer and the | |||
second thing that we're going to talk | |||
about is exposing our selves as rest services | |||
and this is actually a functionality of MDriven turnkey | |||
so there's an MDrivenRest/get that | |||
takes a command which actually is | |||
ViewModel name and the root object and there is | |||
an MDriven post and we're going to see | |||
how these two simple mvc verbs will | |||
actually solve, I believe, | |||
all problems for us, so let's dive into | |||
some example, I have this model from before | |||
it resides in my MDriven turnkey 006 app slot | |||
and it has a few things like show | |||
all cars and once on a car you could | |||
click it and view edit one car and then it has the override and I | |||
don't want this in this case I'm gonna | |||
remove that, I'm going to go off screen | |||
so I'm back and this is the default view | |||
that was rendered for us | |||
given the view model that | |||
looked like this, right, so what we can do now | |||
is to try an access this information | |||
try to expose this same information as the rest service | |||
in order to do that, we need to select | |||
the head of the view model and set this new property | |||
this is initially false, but if we want a | |||
view to act as a data source available | |||
from a Rest request, we need to set Rest | |||
allowed to true like that and once we have done that I'm also | |||
gonna add and remove this action just | |||
not to confuse we're going to come back to this later | |||
so you're setting a comment on this one | |||
and it should do judt something to be okay | |||
we're gonna leave it like that and so | |||
can we turn this information as rest | |||
well now we have said it allow, said that | |||
it was allow Rest, so we're going to | |||
upload that, so that our turnkey site | |||
works on this view model and check status | |||
and we're done to get this, we could | |||
simply try an access our site with the | |||
new strategy that was said here MDrivenRest/get | |||
like this, like so, but we want to have this view model and this | |||
root object,so let's paste in the view | |||
model name and the root object reference | |||
that shouldn't be there, like this | |||
executing that returns our data as a Rest | |||
document, so let's check this out | |||
registration number F F X Y if I were to | |||
change it here to my new car is FPT128 | |||
that's really cool, because that's | |||
almost as ftp and 128 is really | |||
important number to me because it's well | |||
binary and so I'm quite happy with my | |||
registration number on your card that's | |||
that's finally one I can remember and | |||
save that and as I have saved that and | |||
hit this one again, I can see that it updates | |||
ok so this is one way to expose ourselves as a rest service | |||
let's try and consume ourselves that | |||
sounds weird, but what I mean is that we | |||
could add a viewmodel, well if I'm not | |||
locked by the model dialogue, let's add a | |||
new view model and let's call this | |||
consume our self, weird and going to root that in car and say that | |||
let's add a class action for show | |||
meaning that whenever we see a car there | |||
should be an action that could take us | |||
here, having done that I should see | |||
that there is a class action car | |||
view consume self and if I would wanted to fix | |||
up that action I could do that here | |||
calling it something else but | |||
this is fine so what I want to do here | |||
is I can add the registration number | |||
just to see that, we have it and | |||
then I could add a column prepared for action which really is | |||
generic column with this one checked and | |||
try and get by rest, so that's an action | |||
that we're gonna call to try and consume | |||
to get this information, so basically we | |||
would want to do this in here | |||
and selfvm is the one that has the new | |||
rest operators, rest get and I'm not | |||
been a little fast, because rest get | |||
If I point at this I see the tooltip stating that | |||
the first argument is the target URL | |||
then it's a user and the password and | |||
then it's the name of a nesting so for | |||
now I'm just going to use the target URL | |||
as the first param I'm going to leave the | |||
other ones blank, so paste in that blank | |||
blank the password and the nesting blank | |||
and I didn't chose it correctly, so rest get, ok, so but that yes return | |||
something that we need to store it somewhere | |||
let's add a veriable to do this | |||
viewmodel just to show on the root | |||
I'm gonna do add variable which means | |||
that again one new hear, can call it | |||
that it's a string in here I can assign | |||
the return value to this like this | |||
then I could add a generic column with | |||
the expression of the value of the new | |||
variable, so we don't get confused going | |||
to make this a little bigger like this, so what I want to do is to | |||
push this button and I want to get this | |||
information in this variable, can I do that | |||
well, I'm uploading the model | |||
check status and then I close it | |||
and then I head back here and no | |||
that's not the place, here and I refresh | |||
this one, so we got a new action | |||
view consume ourselves, right, sounds weird but | |||
let's do it, I'm going to press ctrl to | |||
get a new tab, fault I did test that again | |||
press ctrl ok there's something wrong | |||
with my language settings of the | |||
control keys and targeted, so this is | |||
the registration number and trying | |||
get Rest and I get the same information right but as you note | |||
this was like hard-coded to one specific card | |||
the root ID which would mean that | |||
doesn't really matter, what car I took | |||
in here, if I took this one 12345 and | |||
consume I would still get the ftp car | |||
because that was hard-coded in here | |||
so instead of doing this I would like to | |||
just add the self, as I'm rooted, | |||
the views was rooted in a car | |||
externalid like that, in that way | |||
it would be new data for each, | |||
for the rooted object, let's try that out | |||
upload and refreshing it | |||
okay, it wasn't done, refreshing it again, it was done | |||
try and get by rest and now we see that | |||
it is updated, now let's see what happens | |||
if I change this, seven,and what should | |||
happen when I try and get by rest well let's see what happens | |||
it returns the same thing | |||
why because I haven't saved yet so this | |||
is running in its own and this is a new | |||
query against the database and the data | |||
that's actually in the database not the | |||
data that this session is changing, so if | |||
I save this and then press this one I | |||
get the "seven" right nothing strange about that | |||
and just important to know that the | |||
rest operations running their own space | |||
ok just to ensure that we could call anyone | |||
let's do, let's copy this one and put it | |||
below and call it get stuff from spotify by | |||
I was on the spotify developer page | |||
finding out how to formulate a query and I have it here | |||
so and it says query - Metallica and | |||
type- artist so that would assign it | |||
to the new variable as well that would | |||
be fine just testing, uploading and | |||
refreshing get stuff from Spotify that | |||
we get a bunch of data from from there | |||
if we would want to do more advanced | |||
stuff with this like here we let's see | |||
what is the data want to copy that copy | |||
and I'm gonna bring it up in the most | |||
versatile tool yet ever invented, the notepad | |||
yeah, whatever artists' it says it has a | |||
link with artists that goes to here | |||
no here is this one | |||
well it might not be the most brilliant tool | |||
this not bad anyhow, but what I want | |||
to do is to be able to read some of the | |||
things here like, I want to convert it to | |||
objects and these are properties of | |||
the artists object, so and how would I go about that | |||
well I could use the new operator self | |||
selfVM was calling something with | |||
Json to objects and it takes a | |||
type and a string with Json, the type is | |||
actually what kind of root object it | |||
should create from the Json and let's see | |||
and let's just say that we don't have | |||
that yet, but we have this one it's the | |||
vNew variable, but we need to have | |||
somewhere where to store the date | |||
that we get, let's add a new diagram or | |||
rather just do it here and a class data | |||
from spotify and class artist | |||
that has the relation called artist | |||
why, because that what it was | |||
called in the data, so like that and we | |||
want to get this attribute maybe that we | |||
need to match it with an attribute here | |||
and items we might not care about | |||
let's see how does this data | |||
it has a name, so going to add that as well, | |||
so this is the objector we could create and then | |||
it will follow the data and create these as | |||
well that's the general ID idea like that data from spotify | |||
take the values from there and just to | |||
see turn into object call this one | |||
and how can we verify that it works | |||
add the nesting this one going | |||
to be our test all instances right and | |||
it's gonna be hooked up to it this one | |||
call this one artist and the type will | |||
be artist as well and we grab the | |||
properties that we have in it href and the name | |||
let's see how this will work out for us | |||
again upload check that we're done | |||
now it's great that the table for the artist | |||
and things like that, so no need to call | |||
the DBA today, we can manage ourselves | |||
opening up this one consume | |||
ourelves and get stuff from Spotify and | |||
turn into objects and it found and href | |||
but it couldn't match to query metallic | |||
offset let's do the same question hereitems, images | |||
these are only images , so it's all the way down here maybe, no | |||
that's another one, okay I'm gonna figure this out I'm going off screen | |||
ok now I think I got it, it's the items | |||
property that holds all the results so | |||
for this to work we would need to | |||
actually introduce something in between | |||
here called the result set and there is | |||
the one that holds to our tests and | |||
then there would be an association here | |||
called items, this is how this data | |||
looks, so upload that instead | |||
good thing I didn't involve the DBA | |||
because he would rip my head off because | |||
I haven't checked thoroughly enough | |||
before asking him to do work for me | |||
so cancel and refresh this one, get stuff | |||
from Spotify turn into objects | |||
metallica, metalica with Ozzy Osborne, | |||
Lou Reed right so I could choose to save | |||
this and then I would have those objects | |||
and that would be some kind of reference | |||
data for my system to work with or | |||
consider to make this class transient | |||
and ask for it every time | |||
still you can do anything you need with | |||
this strongly typed information once you | |||
have the reference it from from the Json | |||
right that was then turn into objects | |||
Json turning to objects operator,Json to | |||
objects and is there anything left to | |||
show you, yes you will want to allow post | |||
to your own data, so what if we try and | |||
get by Rest and we want to post back a | |||
new registration number or other | |||
just want to post back a new | |||
registration to update supervine | |||
let's add a veriable to have hold the new | |||
registration number, vNewRegNum okay | |||
and let's add a cgeneric column that has | |||
that expression and let's not call it | |||
exact the same thing as the other one | |||
because that's not allowed and put it | |||
put it here and put it below and I'm | |||
gonna make it smaller and below, like that | |||
yep that's fine, that's fine | |||
so I have a new registration number, now | |||
I actually want to post that back to my | |||
rest post, I want to send back to | |||
myself, so we need an action for that | |||
it sort of looks like this one, | |||
UpdateRegNumViaRestPost ok going to change this one | |||
to rest post, bring up that view editor | |||
with some expression just to check | |||
how does it selfVM.RestPost it has | |||
four parameters all strings, target URL | |||
user password and name of nesting ok | |||
what it says after in the end is | |||
adds data in nesting and it also says that | |||
file name underscore something | |||
with upload that something column with | |||
filename from filename underscore something, so that's | |||
advanced we will leave that for later | |||
but what it says that it needs a | |||
nesting to hold the data that we | |||
gonna post up, so assume that we call | |||
that nesting data to post | |||
published and we send that in and then | |||
we add other nesting and we say it's data to post | |||
and it's of type | |||
well it don't care really because we're | |||
going to add the variable at the generic | |||
column and in this column | |||
we're gonna use variable vNewRegNum | |||
like that and now it's important | |||
that what we're going to post up we're | |||
going to post it to this view model called edit one car | |||
ok, so that's add it one car, but what | |||
what does it expect, well edit | |||
on car has these properties, this is what | |||
what will be exposed as the rest | |||
what we can set by rest registration | |||
number it's called right, so we head back | |||
to the consume and we call this one | |||
registration... no I was wrong, ctrl+z to call this one registration | |||
so what we say here is that and grab | |||
grab do rest post to ourselves, but this could | |||
be anywhere, because we got the full URL | |||
on the command "edit one car" with ID | |||
as ourselves the rooted object | |||
from this view that we are in and use | |||
data to post nesting, to get data | |||
so it will upload a multi-part rest | |||
message with at least this column | |||
registration number and set to the | |||
variable that we have assigned our | |||
variable and after that it will get the | |||
return result and how rest post works in | |||
and MDriven is that it will return the | |||
complete as from get, if everything is ok | |||
so that is enough to try it out | |||
upload model, check status, done refresh | |||
so now we have this registration number and if we will get | |||
to get it we see that it's this one and | |||
we set something else so now our variable has | |||
the value something else and we try to | |||
update the registration number by | |||
calling a post request back to ourselves | |||
seems like nothing happened, going off screen | |||
ok I'm back and I figured the problem out | |||
and actually this when I say data to | |||
post it's important that its existing | |||
as a name here, so it will be found so | |||
self and back is associated to the data post | |||
this this is small screen here | |||
well, this one goes up here come back here | |||
maybe we should do something like this | |||
to better fit on the screen | |||
that was the first error but I did another thing wrong as well in my | |||
URL even if I said that it was the | |||
command rest post, which will be | |||
a post command on I actually had from the | |||
copypaste to get verb on our server | |||
our server thought, that well I'm not | |||
gonna post anything because this is a get | |||
so no data was actually applied, so having fix those things and | |||
of course it's just common sense when | |||
you post you need to go to | |||
the post endpoint and when you get you do it | |||
from the get endpoint and once that is done | |||
and I uploaded the model with | |||
those changes I get refresh the view | |||
I can now enter something else on | |||
the registration number and update via | |||
post and this one is returned with registration numbers | |||
something number something else | |||
so we have shown how we can expose | |||
ourselves as rest services and we have | |||
also shown how we can update via rest | |||
services we have shown how we can | |||
consume others how we can consume the | |||
JSon result from others to create the objects in our model and | |||
what's left well one cool thing that we need to show | |||
is the ability to actually execute | |||
operations because this becomes | |||
important if you want to do delete maybe | |||
some kind of complex operation on | |||
your data before returning, actually it's | |||
quite easy and we saw it already because | |||
I had it in the test sample I guess | |||
on the one that we have enabled rest for | |||
allow rest- edit one car we can have it | |||
actions all actions available on the | |||
root level will actually be executed | |||
they will be executed on gets and they | |||
will be executed on posts, so this is important to remember | |||
we can actually do stuff here, so remember | |||
if I've commented this out before you | |||
comment it back again, so what it says here is that | |||
registration number should equals itself | |||
plus something and here it says some | |||
param and this is another important | |||
aspect that we can send in more | |||
parameters on the command line or on the URLs | |||
parameters, HTML parameters, so what is | |||
this that's actually just a veriable | |||
defined here with some param as string | |||
and that would be nothing I guess if we | |||
don't have a default value, let's set the | |||
default value, something and upload model | |||
and this reloads something else | |||
is registration number | |||
and we got this, we didn't get the default value | |||
let's see if I put that wrong I | |||
can't really remember with default value | |||
is going, think it's going in the other one | |||
uploading the model off-screen, refreshing this | |||
what happened now, unbracket, check | |||
status and that probably wasn't a good place to | |||
have it and see if everything is work | |||
you see localhost I'm in the | |||
wrong place,something else | |||
something else, oh and apparently I shouldn't have had | |||
their asteriskes that so the value is | |||
actually something else, but since the | |||
action executes before it returns from | |||
the get it appends this so this isn't | |||
actually saved, but what if I were to do the same on the post | |||
well I say that the new registration | |||
number should be www and update | |||
I sort of expected that to become | |||
and never mind | |||
so can we change this value to | |||
something else by sending in something | |||
else on that URL | |||
yes, we can consume ourselves and we | |||
have this place here and we can just | |||
send in let's add some more parameters | |||
and they are separated by n and we call | |||
that one well now the short-term memory problem | |||
appears I don't remember | |||
what do we call it, on card call it | |||
vSomeParam, consume, hello, | |||
so I can send data and one that's actually | |||
interesting, didn't update if anyone can | |||
help me find that error, ok and back here | |||
upload and trying it rest,now it's hello | |||
because that's what we sent on that we | |||
sent on on the command line or a day in | |||
the URL alright so this is a short introduction | |||
on how to work with them rest interfaces | |||
both consuming information from others | |||
and exposing information from ourselves | |||
and it's quite powerful and you can do a | |||
lot of things and it's good when | |||
integrating both functionality and | |||
information services into your system |
Revision as of 19:12, 5 January 2017
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.
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.
selfVM.RestGet(targeturl,user,pwd,optionalnestingwithheaders)
selfVM.RestPost(targeturl,user,pwd,optionalnestingwithheadersAndUploadValues)
selfVM.RestDownload(targeturl,user,pwd,optionalnestingwithheaders)
There is a also a new helper operator on selfVM:
selfVM.JSonToObjects( «<Type>» , JSonDataInStringFormat)
The selfVM.JSonToObjects creates objects of class Type and matches attributes and association from the json data – and it can create object trees (unclosed graphs) by following names on associations. These few additions enables us to consume Rest services that others expose.
And when it comes to exposing ourselves to others – Turnkey has two new MVC verbs:
MDrivenRest/Get?command=vmname&id=rootobjref
MDrivenRest/Post?command=vmname&id=rootobjref
What they do is that they look for ViewModel named as the command-parameter, if one is found the accessgroups are checked to see if access is allowed. If it is, additional parameters sent in the url are matched against ViewModel variables – and given corresponding values. Then any actions present in the root level of the ViewModel are executed. And then the Get verb packs the viewmodel content as json in the response.
The Post verb looks in the request values after names that match the ViewModel root – if match is found the corresponding value is applied. Then changes – if any – are committed to db. The last thing for post is that it packs the complete ViewModel as json in the response. If there is an error – a string “error: <message>” is returned.
You must set RestAllowed on ViewModels you want to allow Rest access to.
-
calling an existing REST service
exposing ourself as REST service
-
MDriven turnkey app slot
how to expose information as the Rest service?
MDriven Rest/get strategy
-
selfvm
Rest/Get operator
hard-coded objects
-
RestPost operator as a post command
operation execution
vSomeParam adding new parameters
Raw subtitles text
Rest services and MDriven turkey, so Rest
is a very powerful simple way to access
web services on the web and retrieving
information from really anyone
so there's a growing catalog of available
web services, that deliver rest type
messages just to name a few and you
could get the things from Spotify to get
artists or seek their catalog with
resting interfaces you could call on
services to upload the word documents to
get the PDF in return, you could up
request the email sent in your name etc
so it's a very powerful way to get
both information and functionality
from other providers, so how does it
work with MDriven turkey, well there
actually two kinds of needs one kind
is calling existing rest services and
the other one is to expose our self as
rest services, so we're going to look at
both today and there's a new article out
rest services and MDriven turnkey
so calling an existing rest service
there are new ocl operators on the selfVM class
so you can call a target URL
and get data back and you can post to
target URL or you can download and this
is the case when you have requested
something bigger like a file being
produced for you or something
there's also a method to convert JSon
that you have in a string
to objects in your model
so that it will be easier to work on, with the data and with the tools
you know from MDriven designer and the
second thing that we're going to talk
about is exposing our selves as rest services
and this is actually a functionality of MDriven turnkey
so there's an MDrivenRest/get that
takes a command which actually is
ViewModel name and the root object and there is
an MDriven post and we're going to see
how these two simple mvc verbs will
actually solve, I believe,
all problems for us, so let's dive into
some example, I have this model from before
it resides in my MDriven turnkey 006 app slot
and it has a few things like show
all cars and once on a car you could
click it and view edit one car and then it has the override and I
don't want this in this case I'm gonna
remove that, I'm going to go off screen
so I'm back and this is the default view
that was rendered for us
given the view model that
looked like this, right, so what we can do now
is to try an access this information
try to expose this same information as the rest service
in order to do that, we need to select
the head of the view model and set this new property
this is initially false, but if we want a
view to act as a data source available
from a Rest request, we need to set Rest
allowed to true like that and once we have done that I'm also
gonna add and remove this action just
not to confuse we're going to come back to this later
so you're setting a comment on this one
and it should do judt something to be okay
we're gonna leave it like that and so
can we turn this information as rest
well now we have said it allow, said that
it was allow Rest, so we're going to
upload that, so that our turnkey site
works on this view model and check status
and we're done to get this, we could
simply try an access our site with the
new strategy that was said here MDrivenRest/get
like this, like so, but we want to have this view model and this
root object,so let's paste in the view
model name and the root object reference
that shouldn't be there, like this
executing that returns our data as a Rest
document, so let's check this out
registration number F F X Y if I were to
change it here to my new car is FPT128
that's really cool, because that's
almost as ftp and 128 is really
important number to me because it's well
binary and so I'm quite happy with my
registration number on your card that's
that's finally one I can remember and
save that and as I have saved that and
hit this one again, I can see that it updates
ok so this is one way to expose ourselves as a rest service
let's try and consume ourselves that
sounds weird, but what I mean is that we
could add a viewmodel, well if I'm not
locked by the model dialogue, let's add a
new view model and let's call this
consume our self, weird and going to root that in car and say that
let's add a class action for show
meaning that whenever we see a car there
should be an action that could take us
here, having done that I should see
that there is a class action car
view consume self and if I would wanted to fix
up that action I could do that here
calling it something else but
this is fine so what I want to do here
is I can add the registration number
just to see that, we have it and
then I could add a column prepared for action which really is
generic column with this one checked and
try and get by rest, so that's an action
that we're gonna call to try and consume
to get this information, so basically we
would want to do this in here
and selfvm is the one that has the new
rest operators, rest get and I'm not
been a little fast, because rest get
If I point at this I see the tooltip stating that
the first argument is the target URL
then it's a user and the password and
then it's the name of a nesting so for
now I'm just going to use the target URL
as the first param I'm going to leave the
other ones blank, so paste in that blank
blank the password and the nesting blank
and I didn't chose it correctly, so rest get, ok, so but that yes return
something that we need to store it somewhere
let's add a veriable to do this
viewmodel just to show on the root
I'm gonna do add variable which means
that again one new hear, can call it
that it's a string in here I can assign
the return value to this like this
then I could add a generic column with
the expression of the value of the new
variable, so we don't get confused going
to make this a little bigger like this, so what I want to do is to
push this button and I want to get this
information in this variable, can I do that
well, I'm uploading the model
check status and then I close it
and then I head back here and no
that's not the place, here and I refresh
this one, so we got a new action
view consume ourselves, right, sounds weird but
let's do it, I'm going to press ctrl to
get a new tab, fault I did test that again
press ctrl ok there's something wrong
with my language settings of the
control keys and targeted, so this is
the registration number and trying
get Rest and I get the same information right but as you note
this was like hard-coded to one specific card
the root ID which would mean that
doesn't really matter, what car I took
in here, if I took this one 12345 and
consume I would still get the ftp car
because that was hard-coded in here
so instead of doing this I would like to
just add the self, as I'm rooted,
the views was rooted in a car
externalid like that, in that way
it would be new data for each,
for the rooted object, let's try that out
upload and refreshing it
okay, it wasn't done, refreshing it again, it was done
try and get by rest and now we see that
it is updated, now let's see what happens
if I change this, seven,and what should
happen when I try and get by rest well let's see what happens
it returns the same thing
why because I haven't saved yet so this
is running in its own and this is a new
query against the database and the data
that's actually in the database not the
data that this session is changing, so if
I save this and then press this one I
get the "seven" right nothing strange about that
and just important to know that the
rest operations running their own space
ok just to ensure that we could call anyone
let's do, let's copy this one and put it
below and call it get stuff from spotify by
I was on the spotify developer page
finding out how to formulate a query and I have it here
so and it says query - Metallica and
type- artist so that would assign it
to the new variable as well that would
be fine just testing, uploading and
refreshing get stuff from Spotify that
we get a bunch of data from from there
if we would want to do more advanced
stuff with this like here we let's see
what is the data want to copy that copy
and I'm gonna bring it up in the most
versatile tool yet ever invented, the notepad
yeah, whatever artists' it says it has a
link with artists that goes to here
no here is this one
well it might not be the most brilliant tool
this not bad anyhow, but what I want
to do is to be able to read some of the
things here like, I want to convert it to
objects and these are properties of
the artists object, so and how would I go about that
well I could use the new operator self
selfVM was calling something with
Json to objects and it takes a
type and a string with Json, the type is
actually what kind of root object it
should create from the Json and let's see
and let's just say that we don't have
that yet, but we have this one it's the
vNew variable, but we need to have
somewhere where to store the date
that we get, let's add a new diagram or
rather just do it here and a class data
from spotify and class artist
that has the relation called artist
why, because that what it was
called in the data, so like that and we
want to get this attribute maybe that we
need to match it with an attribute here
and items we might not care about
let's see how does this data
it has a name, so going to add that as well,
so this is the objector we could create and then
it will follow the data and create these as
well that's the general ID idea like that data from spotify
take the values from there and just to
see turn into object call this one
and how can we verify that it works
add the nesting this one going
to be our test all instances right and
it's gonna be hooked up to it this one
call this one artist and the type will
be artist as well and we grab the
properties that we have in it href and the name
let's see how this will work out for us
again upload check that we're done
now it's great that the table for the artist
and things like that, so no need to call
the DBA today, we can manage ourselves
opening up this one consume
ourelves and get stuff from Spotify and
turn into objects and it found and href
but it couldn't match to query metallic
offset let's do the same question hereitems, images
these are only images , so it's all the way down here maybe, no
that's another one, okay I'm gonna figure this out I'm going off screen
ok now I think I got it, it's the items
property that holds all the results so
for this to work we would need to
actually introduce something in between
here called the result set and there is
the one that holds to our tests and
then there would be an association here
called items, this is how this data
looks, so upload that instead
good thing I didn't involve the DBA
because he would rip my head off because
I haven't checked thoroughly enough
before asking him to do work for me
so cancel and refresh this one, get stuff
from Spotify turn into objects
metallica, metalica with Ozzy Osborne,
Lou Reed right so I could choose to save
this and then I would have those objects
and that would be some kind of reference
data for my system to work with or
consider to make this class transient
and ask for it every time
still you can do anything you need with
this strongly typed information once you
have the reference it from from the Json
right that was then turn into objects
Json turning to objects operator,Json to
objects and is there anything left to
show you, yes you will want to allow post
to your own data, so what if we try and
get by Rest and we want to post back a
new registration number or other
just want to post back a new
registration to update supervine
let's add a veriable to have hold the new
registration number, vNewRegNum okay
and let's add a cgeneric column that has
that expression and let's not call it
exact the same thing as the other one
because that's not allowed and put it
put it here and put it below and I'm
gonna make it smaller and below, like that
yep that's fine, that's fine
so I have a new registration number, now
I actually want to post that back to my
rest post, I want to send back to
myself, so we need an action for that
it sort of looks like this one,
UpdateRegNumViaRestPost ok going to change this one
to rest post, bring up that view editor
with some expression just to check
how does it selfVM.RestPost it has
four parameters all strings, target URL
user password and name of nesting ok
what it says after in the end is
adds data in nesting and it also says that
file name underscore something
with upload that something column with
filename from filename underscore something, so that's
advanced we will leave that for later
but what it says that it needs a
nesting to hold the data that we
gonna post up, so assume that we call
that nesting data to post
published and we send that in and then
we add other nesting and we say it's data to post
and it's of type
well it don't care really because we're
going to add the variable at the generic
column and in this column
we're gonna use variable vNewRegNum
like that and now it's important
that what we're going to post up we're
going to post it to this view model called edit one car
ok, so that's add it one car, but what
what does it expect, well edit
on car has these properties, this is what
what will be exposed as the rest
what we can set by rest registration
number it's called right, so we head back
to the consume and we call this one
registration... no I was wrong, ctrl+z to call this one registration
so what we say here is that and grab
grab do rest post to ourselves, but this could
be anywhere, because we got the full URL
on the command "edit one car" with ID
as ourselves the rooted object
from this view that we are in and use
data to post nesting, to get data
so it will upload a multi-part rest
message with at least this column
registration number and set to the
variable that we have assigned our
variable and after that it will get the
return result and how rest post works in
and MDriven is that it will return the
complete as from get, if everything is ok
so that is enough to try it out
upload model, check status, done refresh
so now we have this registration number and if we will get
to get it we see that it's this one and
we set something else so now our variable has
the value something else and we try to
update the registration number by
calling a post request back to ourselves
seems like nothing happened, going off screen
ok I'm back and I figured the problem out
and actually this when I say data to
post it's important that its existing
as a name here, so it will be found so
self and back is associated to the data post
this this is small screen here
well, this one goes up here come back here
maybe we should do something like this
to better fit on the screen
that was the first error but I did another thing wrong as well in my
URL even if I said that it was the
command rest post, which will be
a post command on I actually had from the
copypaste to get verb on our server
our server thought, that well I'm not
gonna post anything because this is a get
so no data was actually applied, so having fix those things and
of course it's just common sense when
you post you need to go to
the post endpoint and when you get you do it
from the get endpoint and once that is done
and I uploaded the model with
those changes I get refresh the view
I can now enter something else on
the registration number and update via
post and this one is returned with registration numbers
something number something else
so we have shown how we can expose
ourselves as rest services and we have
also shown how we can update via rest
services we have shown how we can
consume others how we can consume the
JSon result from others to create the objects in our model and
what's left well one cool thing that we need to show
is the ability to actually execute
operations because this becomes
important if you want to do delete maybe
some kind of complex operation on
your data before returning, actually it's
quite easy and we saw it already because
I had it in the test sample I guess
on the one that we have enabled rest for
allow rest- edit one car we can have it
actions all actions available on the
root level will actually be executed
they will be executed on gets and they
will be executed on posts, so this is important to remember
we can actually do stuff here, so remember
if I've commented this out before you
comment it back again, so what it says here is that
registration number should equals itself
plus something and here it says some
param and this is another important
aspect that we can send in more
parameters on the command line or on the URLs
parameters, HTML parameters, so what is
this that's actually just a veriable
defined here with some param as string
and that would be nothing I guess if we
don't have a default value, let's set the
default value, something and upload model
and this reloads something else
is registration number
and we got this, we didn't get the default value
let's see if I put that wrong I
can't really remember with default value
is going, think it's going in the other one
uploading the model off-screen, refreshing this
what happened now, unbracket, check
status and that probably wasn't a good place to
have it and see if everything is work
you see localhost I'm in the
wrong place,something else
something else, oh and apparently I shouldn't have had
their asteriskes that so the value is
actually something else, but since the
action executes before it returns from
the get it appends this so this isn't
actually saved, but what if I were to do the same on the post
well I say that the new registration
number should be www and update
I sort of expected that to become
and never mind
so can we change this value to
something else by sending in something
else on that URL
yes, we can consume ourselves and we
have this place here and we can just
send in let's add some more parameters
and they are separated by n and we call
that one well now the short-term memory problem
appears I don't remember
what do we call it, on card call it
vSomeParam, consume, hello,
so I can send data and one that's actually
interesting, didn't update if anyone can
help me find that error, ok and back here
upload and trying it rest,now it's hello
because that's what we sent on that we
sent on on the command line or a day in
the URL alright so this is a short introduction
on how to work with them rest interfaces
both consuming information from others
and exposing information from ourselves
and it's quite powerful and you can do a
lot of things and it's good when
integrating both functionality and
information services into your system