Eve: Building RESTful APIs with MongoDB and Flask Transcripts
Chapter: Fine-tuning your REST service
Lecture: Client and server projections
0:00 Projections are a powerful feature,
0:03 they allow a client to dictate of all document fields
0:05 which ones should be returned with the response.
0:11 In this request here we're asking for just the last name field
0:15 let's send it over and we can see that all the documents still have
0:21 the meta fields because these are always included
0:24 no matter the projection. We can also exclude fields,
0:27 for example, here I'm excluding the last name field
0:30 I want all the fields but not last name
0:33 and as you can see, here we're getting first name, location,
0:36 age, role, etc, but no last name.
0:40 Projections are nice because they allow the client
0:44 to pick only the fields it really needs.
0:47 Imagine if the people document had a picture
0:50 if we don't need a picture, we can just exclude it
0:55 and we won't be forced to download it, how nice is that?
0:59 You can, of course, disable projections
1:02 you simply go to the code editor in your settings file
1:05 and set projection to false.
1:10 This is global, and as you might expect by now
1:13 you can go and switch it on at local level if you want to.
1:24 So now projections are disabled at all endpoints but people.
1:29 Of course, we can also change the word used to query for a projection
1:41 let me save, relaunch, go back to Postman,
1:49 and use fields instead. Got it.
1:56 Now, so far we've have seen that the client can control projections
2:00 but we can actually predefine projections on server side.
2:05 Let's see how we do that.
2:10 Let's first clean up a little bit,
2:15 all right, we define server side projections at the endpoint level,
2:20 let me paste an example here,
2:23 data source is dictionary and it allows the projection key
2:29 do not confuse this projection key with root level projection boolean
2:33 which allows you to turn projection feature on and off.
2:38 So here we're setting a projection server side
2:41 every request sent to the people endpoint
2:44 will not include last name by default
2:47 let's try this, save, relaunch as usual and let's ask for people
2:58 without any client projection, same response.
3:03 No last name included with the response
3:16 as you can see, clients can still alter the output if they wish
3:19 but that the default is a different projection
3:23 it is a server projection,
3:26 default server side projection can come in handy in several situations
3:29 one is the picture we mentioned before,
3:32 you aren't letting the clients download it by default
3:36 but they can still go and require it with a specific projection should they need it.
3:41 Also keep in mind that projections are a read-only thing
3:46 they don't apply to write operation.
3:48 You still have a schema endpoint and clients can still write
3:53 the world document or edit the world document as they please.