|
|
Line 124: |
Line 124: |
| </html> | | </html> |
|
| |
|
| '''Raw subtitles text'''
| |
|
| |
| Rest services and MDriven turnkey, 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 turnkey, 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
| |
| [[Category:Rest]] | | [[Category:Rest]] |
| [[Category:Advanced]] | | [[Category:Advanced]] |