Consuming HTTP Services in Python Transcripts
Chapter: Consuming RESTful HTTP services
Lecture: Blog explorer: Updating a post
0:01 Our blog explorer lets us list post and add new ones,
0:04 now it's time to make them editable,
0:07 so I've added just a little bit of I guess you could call this user interface code,
0:11 like some interaction with the user to ask them
0:13 show me the posts that you would like
0:16 basically I am going to list them out and put numbers by them,
0:19 you tell me which number it is you want to edit
0:21 and then I give them the option to enter a new title
0:24 and I use a little conditional here to say if they don't enter anything
0:28 we'll just use the existing title, we do that for content and for view count.
0:32 So, that is going to get us something that looks like this,
0:35 if we go over here and say update it's going to say alright, these are all the posts,
0:38 which one would you like to update, let's update our success story.
0:41 So it says okay, we could just hit this,
0:43 alright I could but the view count this thing has gone crazy, it looks like this,
0:47 and of course, nothing happens because that is the part we are going to write right now.
0:51 Okay, but that is what this user interaction bit here is, so we have the data,
0:54 I'll say post data again that we want to update
0:58 and I am going to put this into a dictionary just like before,
1:02 now we don't have published, we are not asking them when it was published,
1:06 that part can't be changed, so I am going to say post.published
1:10 and we'll just use the one we got back from the server, here
1:13 well, we got all of them back from the server and we picked one
1:16 based on the number they chose, enter a number of post,
1:20 notice, there is no error handling, we are just assuming
1:23 this is going to be an int, and anything you build,
1:26 you know, obviously, error handling is important, so here is the updated data,
1:29 and maybe they entered nothing and we're just sending the title back,
1:32 but maybe they updated the content
1:34 and we are going to send a new version of content, or whatever.
1:38 So, what do we need to do to update it?
1:40 First of all, we're going to need the url, that's going to be base url plus,
1:44 what we had to forward is api/blog but in our service, over here,
1:49 if we are going to do an update, we have to do a put request
1:53 to /api/blog/the id of the post so let's make that happen,
1:58 so it's going to be like so, and then we have post.id, like that,
2:03 okay, now remember, these are named tuples that are coming back from our get post
2:08 so we can access them just like .id and .publish,
2:11 we are going to have to use dictionary, okay so we have this,
2:15 we want to say the response is going to be request.put
2:19 and again we have url and data now this time I don't think we have a json
2:22 so we're going to have to be a little more careful, so we have url data=json.dump s
2:30 so that is going to do the stringification of the post data,
2:34 and if we had any headers, we could set the headers as well here.
2:37 Okay, we want to do this put, and then we'll say if we got to test for success,
2:41 status code what does success mean, for an update command.
2:46 Well, it might be 200 if they are not very careful with their codes,
2:49 but it turns out that the most precise response from the server should be 204.
2:55 So 204 means the server has successfully fulfilled the request
3:00 and that there is no additional data for you to get, if we've given it the new data,
3:04 we already know the id, we already have the server representation of the post,
3:07 if we really want it back we can ask for it, so if it's not equal to this,
3:11 we are going to print as always maybe there is text,
3:14 if there was an error, who knows, but if there is not,
3:18 we are just going to say print, so this is status does equal 204,
3:22 successfully updated and I'll just print out the title.
3:26 Okay, I think that's going to do it, we probably want to consider the headers,
3:32 but let's go and just run with this, okay, so let's do a list and we still have our data,
3:37 remember, this is a stateful server, so it has our success story and it has,
3:42 this is our attempt to create a first post, okay, now, the first attempt,
3:47 people love getting started stories so maybe it's been viewed a lot
3:50 and maybe we want to change the title or the body just a little bit
3:53 so let's say we want to update a post, alright, which number do we want to edit?
3:57 We want to edit this one which is 4, okay, this is our first attempt,
4:01 let's take the default title, say "I knew all along that this demo would work the first time"
4:10 of course I did, and like I said, that's been viewed 1001 times,
4:16 I don't know if this demo worked, but the one that created that post,
4:18 that one I can be sure it did actually work the first time, I think this is going to work,
4:22 let's see, we've got a request.put data as stringified json and url
4:29 to the particular post, I think it's going to work, let's give it a shot.
4:32 Successfully updated, our first post. How cool is that;
4:36 now, if I do a list, we'll know this worked if it went from what it was before,
4:40 scroll, scroll, from 10 to a 1001, let's do a list and find out.
4:45 Boom, 1001, alright, let's do that one more time, we'll pick number 4 again,
4:52 this first attempt was a winner, and we'll just take these defaults here
4:59 and update it again, let's do another list, see this first attempt was a winner,
5:03 it took those values and of course,
5:06 we are doing a put back to the url specified by that id.