#100DaysOfCode in Python Transcripts
Chapter: Days 55-57: Structured API clients with uplink
Lecture: Demo: Writing a new post
0:00 If we look at our service,
0:01 it tell us the way to create a post
0:04 is to add HTTP POST against that URL.
0:07 And what we need to do in our post,
0:10 is basically pass this information along.
0:13 A title, a content, a view count, and a publisher.
0:16 We don't need the id that's generated by the database.
0:19 We need to somehow do that, and it starts out looking pretty
0:25 obvious, but then it's not so obvious it's easy,
0:27 it's just not obvious.
0:29 So we know that we want to do HTTP POST against
0:34 /api/blog, and this will be create new entry.
0:40 And it's going to have some stuff that goes here.
0:43 This'll be create a new post, but what well it turns out
0:50 right at this level, I don't love the way that this works,
0:54 I would like to see something different, but here's how it
0:57 works. Basically you pass
0:59 **kwargs, you pass arbitrary keyword arguments.
1:02 And then what you say is this an uplink.body
1:06 So this document maps to the body.
1:08 Now this is actually not going to work quite at first,
1:11 it's going to give us the funky error, the fix is super easy
1:15 I want you to see me run into the error,
1:17 so that you can get around it.
1:20 It really depends on what the service is expecting, this
1:23 service expects a JSON body, if this was like a form
1:26 post type of thing, then what we actually have is perfect.
1:29 So let's go and try to use this.
1:33 I'll just pay some code that gets the input from the user.
1:36 Okay so, here's what we're going to do, we're going to ask
1:38 for the title, the body, and the view count from the user
1:42 again no error handling on the view count,
1:44 but you should add that.
1:45 And then we're just going to say it's published right now,
1:47 when you right it.
1:48 You can't change that.
1:49 And so we're going to call create new entry
1:51 and we're going to use keyword arguments here.
1:53 Now PyCharm is being a little more, helpful.
1:57 Basically the way they're using type annotations to
2:00 structure the behavior is conflicting with the actual
2:03 type checking that PyCharm is doing here.
2:06 So I'm not sure PyCharm really has this right, I'm not
2:09 sure who I should blame for this little funkiness here.
2:11 But let's just tell it chill out for a minute, so we can
2:14 suppress that for this statement and it will be okay.
2:16 Now this should fail with a 400 bad response, but it's
2:20 not obvious why.
2:22 Let's go and run that, and now notice there's
2:23 a bunch of these that are starting to pile up.
2:26 Let's close them off, and tell this to run a single instance
2:30 so it restarts.
2:31 Alright let's try this, I'm going try to right a post,
2:34 this is going to be just created this, and the contents are
2:39 going to be a new post, it's viewed 71 times, and boom 400.
2:43 Bad request. Why?
2:46 Well it's not at all obvious why,
2:49 you'd have to somehow look at the response from the server
2:52 or something to that effect maybe the server
2:54 could give you a better answer.
2:56 Could not parse the JSON body you sent,
2:58 it looks like this but I expected something else,
3:00 this service doesn't give us enough
3:02 information really to know.
3:03 But I'll tell you what is happening is,
3:05 it's actually doing form encoded post, rather than a JSON
3:10 So we need to tell this little client,
3:13 hey when you post stuff to this server do that in JSON form
3:16 not standard web form.
3:17 So we can just say a uplink.json.
3:19 So now this applies to every method anytime it sees the body
3:23 that means JSON when we say that.
3:25 Let's run it again and this should work,
3:27 and let's do a quick read just to see.
3:29 Notice there are 4, let's do one,
3:31 now let's write a new post, this was done live,
3:36 and it should come into existence.
3:38 Should be fun to see it appear now, and it's very popular.
3:43 Boom, look at that it's created.
3:45 Well our program said it's created,
3:47 has an id that means is like probably did,
3:50 but let's just hit list again.
3:51 Look at that, number one this was done live,
3:54 and let's actually view the details of it.
3:56 This was done live, right now you can see
3:59 when it was recorded, and it should be fine
4:00 and appears right now, this is totally cool.
4:02 Let's do one little quick fix, up here let's put a comma.
4:05 Digit grouping in there, so over here
4:10 we can say colon comma, that will do Digit grouping.
4:14 Now we can read them, 1000 view perfect this was done live.
4:19 To review we figured out what the URL
4:23 is that we're going to work with.
4:24 For various API end points, we created functions
4:28 that map that information to behaviors we're doing here.
4:32 And then we just call them, and we don't even implement
4:35 anything, look there's literally no implementation to any of
4:38 these methods.
4:39 They're just documented which is pretty wild actually.