All language subtitles for 019 Making the API Better_ Aliasing_Downloadly.ir_en

af Afrikaans
ak Akan
sq Albanian
am Amharic
ar Arabic
hy Armenian
az Azerbaijani
eu Basque
be Belarusian
bem Bemba
bn Bengali
bh Bihari
bs Bosnian
br Breton
bg Bulgarian
km Cambodian
ca Catalan
ceb Cebuano
chr Cherokee
ny Chichewa
zh-CN Chinese (Simplified)
zh-TW Chinese (Traditional)
co Corsican
hr Croatian
cs Czech
da Danish
nl Dutch
en English
eo Esperanto
et Estonian
ee Ewe
fo Faroese
tl Filipino
fi Finnish
fr French
fy Frisian
gaa Ga
gl Galician
ka Georgian
de German
el Greek
gn Guarani
gu Gujarati
ht Haitian Creole
ha Hausa
haw Hawaiian
iw Hebrew
hi Hindi
hmn Hmong
hu Hungarian
is Icelandic
ig Igbo
id Indonesian
ia Interlingua
ga Irish
it Italian
ja Japanese
jw Javanese
kn Kannada
kk Kazakh
rw Kinyarwanda
rn Kirundi
kg Kongo
ko Korean
kri Krio (Sierra Leone)
ku Kurdish
ckb Kurdish (Soranî)
ky Kyrgyz
lo Laothian
la Latin
lv Latvian
ln Lingala
lt Lithuanian
loz Lozi
lg Luganda
ach Luo
lb Luxembourgish
mk Macedonian
mg Malagasy
ms Malay
ml Malayalam
mt Maltese
mi Maori
mr Marathi
mfe Mauritian Creole
mo Moldavian
mn Mongolian
my Myanmar (Burmese)
sr-ME Montenegrin
ne Nepali
pcm Nigerian Pidgin
nso Northern Sotho
no Norwegian
nn Norwegian (Nynorsk)
oc Occitan
or Oriya
om Oromo
ps Pashto
fa Persian Download
pl Polish
pt-BR Portuguese (Brazil)
pt Portuguese (Portugal)
pa Punjabi
qu Quechua
ro Romanian
rm Romansh
nyn Runyakitara
ru Russian
sm Samoan
gd Scots Gaelic
sr Serbian
sh Serbo-Croatian
st Sesotho
tn Setswana
crs Seychellois Creole
sn Shona
sd Sindhi
si Sinhalese
sk Slovak
sl Slovenian
so Somali
es Spanish
es-419 Spanish (Latin American)
su Sundanese
sw Swahili
sv Swedish
tg Tajik
ta Tamil
tt Tatar
te Telugu
th Thai
ti Tigrinya
to Tonga
lua Tshiluba
tum Tumbuka
tr Turkish
tk Turkmen
tw Twi
ug Uighur
uk Ukrainian
ur Urdu
uz Uzbek
vi Vietnamese
cy Welsh
wo Wolof
xh Xhosa
yi Yiddish
yo Yoruba
zu Zulu
Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated: 1 00:00:01,330 --> 00:00:02,860 Another nice small feature 2 00:00:02,860 --> 00:00:04,910 that we can add to an API is 3 00:00:04,910 --> 00:00:08,070 to provide an alias route to a request 4 00:00:08,070 --> 00:00:09,660 that might be very popular, 5 00:00:09,660 --> 00:00:11,963 so it might be requested all the time. 6 00:00:13,400 --> 00:00:15,260 And, for example, we might want 7 00:00:15,260 --> 00:00:17,790 to provide a route specifically 8 00:00:17,790 --> 00:00:20,203 for the five best cheap tours. 9 00:00:21,324 --> 00:00:23,530 So, if we'd use our regular route here 10 00:00:23,530 --> 00:00:25,530 with the filters and with all the features 11 00:00:25,530 --> 00:00:26,580 that we already have, 12 00:00:26,580 --> 00:00:29,930 the request would look a little bit like this. 13 00:00:29,930 --> 00:00:32,090 So, let's get ride of all of this. 14 00:00:32,090 --> 00:00:34,510 So, the five best and cheapest tours. 15 00:00:34,510 --> 00:00:37,340 So, that means we have a limit of five 16 00:00:39,495 --> 00:00:42,663 and then we're gonna sort by ratings and by price. 17 00:00:44,300 --> 00:00:47,640 So, sort and then the average rating, 18 00:00:47,640 --> 00:00:52,640 and descending, so minus ratings average. 19 00:00:54,110 --> 00:00:56,750 And, in case they have the same average, 20 00:00:56,750 --> 00:00:59,270 then we want the cheapest price possible. 21 00:00:59,270 --> 00:01:02,353 And so, we're gonna sort also by price. 22 00:01:03,610 --> 00:01:06,060 Let's quickly take a look at the results. 23 00:01:06,060 --> 00:01:08,163 And, indeed, we get five tours here. 24 00:01:09,670 --> 00:01:12,560 And, Postman does this scrolling again. 25 00:01:12,560 --> 00:01:14,517 So, we have tours with 4.9, 26 00:01:15,951 --> 00:01:18,640 4.9, 4.9 again, 27 00:01:18,640 --> 00:01:20,553 4.8, and 4.7. 28 00:01:22,250 --> 00:01:27,060 And so, these are actually our five best and cheapest tours. 29 00:01:27,060 --> 00:01:29,150 If we said cheapest and best, well, 30 00:01:29,150 --> 00:01:32,270 then maybe we would have to sort by price first 31 00:01:32,270 --> 00:01:34,580 because some of them are not really cheap. 32 00:01:34,580 --> 00:01:36,320 For example, this one. 33 00:01:36,320 --> 00:01:40,180 But, we selected, first, the average. 34 00:01:40,180 --> 00:01:43,160 And so, we sorted by the highest average first 35 00:01:43,160 --> 00:01:46,700 and, only then in case of a tie, basically, 36 00:01:46,700 --> 00:01:47,900 only then, by the price. 37 00:01:49,120 --> 00:01:51,340 Now, let's say that this is a request 38 00:01:51,340 --> 00:01:53,350 that is done all the time and we want 39 00:01:53,350 --> 00:01:55,060 to provide a route that is simple 40 00:01:55,060 --> 00:01:57,453 and easy to memorize for the user. 41 00:01:58,670 --> 00:02:02,110 So, let's go to our app and try to implement that. 42 00:02:02,110 --> 00:02:06,330 And, we're gonna start at their routes, so tour router. 43 00:02:06,330 --> 00:02:08,703 And, we then need to create a new route. 44 00:02:09,550 --> 00:02:12,390 And, let's do that here, right at the top. 45 00:02:12,390 --> 00:02:16,913 So, router.route. 46 00:02:18,650 --> 00:02:21,370 And so, how are we gonna call this route? 47 00:02:21,370 --> 00:02:25,293 Well, let's say top-5-cheap. 48 00:02:26,590 --> 00:02:30,010 So, quite a simple name, but it's gonna work. 49 00:02:30,010 --> 00:02:31,810 And then, we actually only want 50 00:02:31,810 --> 00:02:34,103 to get requests to this route. 51 00:02:35,170 --> 00:02:37,480 And so, now it's time to think. 52 00:02:37,480 --> 00:02:41,370 How are we gonna implement this functionality? 53 00:02:41,370 --> 00:02:43,530 Well, in essence, what we want is 54 00:02:43,530 --> 00:02:47,273 to actually still get all the tours just like here. 55 00:02:48,210 --> 00:02:51,070 And so, let me go ahead and start by copying 56 00:02:51,070 --> 00:02:52,930 and pasting that here. 57 00:02:52,930 --> 00:02:56,320 So, we really still want to use this function here 58 00:02:56,320 --> 00:02:57,740 because it doesn't really make sense 59 00:02:57,740 --> 00:03:00,900 to rewrite all of the logic that is in there. 60 00:03:00,900 --> 00:03:04,010 But, before we can call this route ender, 61 00:03:04,010 --> 00:03:06,690 we basically want to prefill some of the fields 62 00:03:06,690 --> 00:03:07,833 in the query string. 63 00:03:08,970 --> 00:03:10,340 So, we already know 64 00:03:10,340 --> 00:03:13,590 that our query string should look like this. 65 00:03:13,590 --> 00:03:16,370 And, actually we can add some more stuff here. 66 00:03:16,370 --> 00:03:18,070 But, in essence, our query string 67 00:03:18,070 --> 00:03:19,970 has to look something like this. 68 00:03:19,970 --> 00:03:23,100 And so, the solution is gonna be to run a middleware 69 00:03:23,100 --> 00:03:26,163 before we actually run this getAllTours handler. 70 00:03:27,080 --> 00:03:28,760 And so, that middleware function is then 71 00:03:28,760 --> 00:03:31,843 gonna manipulate the query object that's coming in. 72 00:03:33,010 --> 00:03:35,210 And so, this is yet another really nice example 73 00:03:35,210 --> 00:03:38,150 of using middleware because you really need 74 00:03:38,150 --> 00:03:41,100 to get familiar and used to this concept 75 00:03:41,100 --> 00:03:44,150 of using middleware strategically in order 76 00:03:44,150 --> 00:03:47,123 to change the request object as we need it. 77 00:03:48,690 --> 00:03:52,100 So, let's add it here then. 78 00:03:52,100 --> 00:03:53,920 So, tourController. 79 00:03:53,920 --> 00:03:55,150 And then, the middleware function 80 00:03:55,150 --> 00:03:57,630 that we're gonna create in a second, 81 00:03:57,630 --> 00:03:59,733 which is gonna be called aliasTopTours. 82 00:04:05,060 --> 00:04:08,820 So, let's copy that name, move to the tourController 83 00:04:08,820 --> 00:04:11,843 and I'm gonna put it here at the very top. 84 00:04:14,100 --> 00:04:15,217 So, exports., 85 00:04:17,370 --> 00:04:19,822 then request, 86 00:04:21,649 --> 00:04:22,600 response, 87 00:04:22,600 --> 00:04:24,030 and what's the third argument 88 00:04:24,030 --> 00:04:27,180 that we need in the middleware, remember? 89 00:04:27,180 --> 00:04:30,700 And, I know the Express section is kind of far away already 90 00:04:30,700 --> 00:04:33,280 at this point, but I hope you remember 91 00:04:33,280 --> 00:04:36,230 that the third argument here needs to be next. 92 00:04:36,230 --> 00:04:38,970 So, in order to call the next middleware 93 00:04:38,970 --> 00:04:40,520 that's in the middleware stack. 94 00:04:45,600 --> 00:04:46,640 Give it a save. 95 00:04:46,640 --> 00:04:49,203 And so, this error there should disappear. 96 00:04:53,554 --> 00:04:55,950 And so, let's do what we said we would do. 97 00:04:55,950 --> 00:04:58,870 So, basically to manipulate the query object 98 00:04:58,870 --> 00:05:01,960 so that when it reaches the getAllTours handler, 99 00:05:01,960 --> 00:05:03,423 it's then already different. 100 00:05:04,270 --> 00:05:07,160 So, let's first do that and then really 101 00:05:07,160 --> 00:05:08,783 take a look at what happens. 102 00:05:10,010 --> 00:05:13,280 So, remember, the limit is gonna be set to five. 103 00:05:13,280 --> 00:05:15,320 And, remember that everything is strings here 104 00:05:15,320 --> 00:05:17,370 and so I'm setting this also to a string. 105 00:05:19,350 --> 00:05:20,703 Now, what else did we had? 106 00:05:21,580 --> 00:05:25,200 So, we have this sort, so let's just copy this here 107 00:05:26,400 --> 00:05:30,623 and say req.query.sort. 108 00:05:32,247 --> 00:05:35,050 It should be this. 109 00:05:35,050 --> 00:05:39,230 And then, we can actually also specify some fields 110 00:05:39,230 --> 00:05:42,560 so that the user doesn't get all of the fields 111 00:05:42,560 --> 00:05:43,660 that we have in there. 112 00:05:46,420 --> 00:05:49,033 So, let's say that we only want the name, the price, 113 00:05:50,070 --> 00:05:52,973 the ratings average, the summary, 114 00:05:54,570 --> 00:05:55,653 and the difficulty. 115 00:05:58,650 --> 00:06:02,600 Give it a save and now all we need is next, 116 00:06:02,600 --> 00:06:05,730 otherwise this middleware will be stuck here forever 117 00:06:05,730 --> 00:06:07,043 and cannot move on. 118 00:06:08,440 --> 00:06:10,420 So, let's now figure out a bit better 119 00:06:10,420 --> 00:06:12,690 what's actually gonna happen here. 120 00:06:12,690 --> 00:06:16,900 So, as soon as someone hits the top-5-cheap route, 121 00:06:16,900 --> 00:06:17,733 we will start. 122 00:06:17,733 --> 00:06:21,470 The first middleware that's gonna be run is aliasTopTours. 123 00:06:21,470 --> 00:06:23,433 So, the function that we just created. 124 00:06:25,420 --> 00:06:27,060 So, what this is gonna do is 125 00:06:27,060 --> 00:06:30,070 that it will set these properties of the query object 126 00:06:30,070 --> 00:06:32,490 to these values that we specified here. 127 00:06:32,490 --> 00:06:35,800 Basically prefilling parts of the query object 128 00:06:35,800 --> 00:06:39,453 before we then reach the getAllTours handler. 129 00:06:40,720 --> 00:06:43,670 And so, as soon as we then get to this function, 130 00:06:43,670 --> 00:06:46,080 the query object is already prefilled, 131 00:06:46,080 --> 00:06:47,960 even if the user didn't put any 132 00:06:47,960 --> 00:06:49,963 of these parameters in the query string. 133 00:06:51,230 --> 00:06:52,170 And so, in essence, 134 00:06:52,170 --> 00:06:55,137 what we're doing here is prefilling the query string 135 00:06:55,137 --> 00:06:57,650 for the user so that the user doesn't have 136 00:06:57,650 --> 00:06:59,083 to do it on his own. 137 00:07:01,024 --> 00:07:03,683 And so, let's now actually go ahead and try this. 138 00:07:04,780 --> 00:07:06,003 So, I'm copying this. 139 00:07:09,380 --> 00:07:11,090 And, here it's not tours. 140 00:07:11,090 --> 00:07:14,463 It is top-5-tours. 141 00:07:16,710 --> 00:07:18,620 Whoa, what's going on here? 142 00:07:18,620 --> 00:07:21,960 For some reason, it doesn't find this route, 143 00:07:21,960 --> 00:07:23,360 so let's go back. 144 00:07:23,360 --> 00:07:25,013 So, top-5-tours. 145 00:07:26,140 --> 00:07:28,720 And so, here in the route, ah, okay. 146 00:07:28,720 --> 00:07:30,690 It's called top-5-cheap, 147 00:07:30,690 --> 00:07:32,093 so my mistake here. 148 00:07:33,440 --> 00:07:35,780 So, cheap, send it now, 149 00:07:35,780 --> 00:07:38,123 and that's still not correct. 150 00:07:40,030 --> 00:07:41,110 Ah, yeah. 151 00:07:41,110 --> 00:07:46,110 Of course, I still have to put the tours here, of course. 152 00:07:46,140 --> 00:07:48,300 So, we are in the tours resource 153 00:07:48,300 --> 00:07:50,210 and the whole router is mounted 154 00:07:50,210 --> 00:07:53,670 onto this tours route, remember that. 155 00:07:53,670 --> 00:07:55,430 And so, it's in that tours, 156 00:07:55,430 --> 00:07:58,140 that kind of mini application, remember that, 157 00:07:58,140 --> 00:08:00,723 where I created this top-5-cheap route. 158 00:08:01,790 --> 00:08:03,470 So, let's hope it works now. 159 00:08:03,470 --> 00:08:04,703 And, indeed, it does. 160 00:08:07,350 --> 00:08:11,030 So, that worked, that's fantastic. 161 00:08:11,030 --> 00:08:15,090 Now, of course, we could do a lot more alias routes here, 162 00:08:15,090 --> 00:08:16,740 but that's not really necessary. 163 00:08:16,740 --> 00:08:19,400 I really just wanted to show you the concept, 164 00:08:19,400 --> 00:08:21,630 show you that it can be a nice feature 165 00:08:21,630 --> 00:08:25,380 to add to any API and also I wanted to, again, 166 00:08:25,380 --> 00:08:27,933 show you the power of middlewares. 167 00:08:29,160 --> 00:08:30,950 So, we're talking about Mongoose here, 168 00:08:30,950 --> 00:08:34,360 but still, it's very important to keep getting familiar 169 00:08:34,360 --> 00:08:37,513 with the Express concepts that we talked about before. 170 00:08:39,039 --> 00:08:42,120 Anyway, we're now done with our API features. 171 00:08:42,120 --> 00:08:44,950 In the next video, we're just gonna quickly refactor all 172 00:08:44,950 --> 00:08:48,690 of this to make the entire code a bit more modular 173 00:08:48,690 --> 00:08:50,293 and, of course, better. 13112

Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.