All language subtitles for 3. Asynchronous JavaScript, AJAX and APIs

af Afrikaans
sq Albanian
am Amharic
ar Arabic
hy Armenian
az Azerbaijani
eu Basque
be Belarusian
bn Bengali
bs Bosnian
bg Bulgarian
ca Catalan
ceb Cebuano
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
tl Filipino
fi Finnish
fr French
fy Frisian
gl Galician
ka Georgian
de German
el Greek
gu Gujarati
ht Haitian Creole
ha Hausa
haw Hawaiian
iw Hebrew
hi Hindi
hmn Hmong
hu Hungarian
is Icelandic
ig Igbo
id Indonesian
ga Irish
it Italian
ja Japanese
jw Javanese
kn Kannada
kk Kazakh
km Khmer
ko Korean
ku Kurdish (Kurmanji)
ky Kyrgyz
lo Lao
la Latin
lv Latvian
lt Lithuanian
lb Luxembourgish
mk Macedonian
mg Malagasy
ms Malay
ml Malayalam
mt Maltese
mi Maori
mr Marathi
mn Mongolian
my Myanmar (Burmese)
ne Nepali
no Norwegian
ps Pashto
fa Persian Download
pl Polish
pt Portuguese
pa Punjabi
ro Romanian
ru Russian
sm Samoan
gd Scots Gaelic
sr Serbian
st Sesotho
sn Shona
sd Sindhi
si Sinhala
sk Slovak
sl Slovenian
so Somali
es Spanish
su Sundanese
sw Swahili
sv Swedish
tg Tajik
ta Tamil
te Telugu
th Thai
tr Turkish
uk Ukrainian
ur Urdu
uz Uzbek
vi Vietnamese
cy Welsh
xh Xhosa
yi Yiddish
yo Yoruba
zu Zulu
or Odia (Oriya)
rw Kinyarwanda
tk Turkmen
tt Tatar
ug Uyghur
Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated: 1 1 00:00:01,380 --> 00:00:03,800 Let's start this section by understanding 2 2 00:00:03,800 --> 00:00:07,030 what asynchronous JavaScript actually is, 3 3 00:00:07,030 --> 00:00:10,420 and also learn about the most popular use cases 4 4 00:00:10,420 --> 00:00:12,640 of asynchronous JavaScript, 5 5 00:00:12,640 --> 00:00:17,363 which is basically to make so-called Ajax calls to APIs. 6 6 00:00:19,160 --> 00:00:20,460 Now, to understand 7 7 00:00:20,460 --> 00:00:23,810 what asynchronous JavaScript code actually is, 8 8 00:00:23,810 --> 00:00:27,530 we first need to understand what synchronous code is. 9 9 00:00:27,530 --> 00:00:31,220 So basically the opposite of asynchronous. 10 10 00:00:31,220 --> 00:00:32,660 So most of the codes 11 11 00:00:32,660 --> 00:00:35,560 that we've been writing so far in the course 12 12 00:00:35,560 --> 00:00:37,850 has been synchronous code, 13 13 00:00:37,850 --> 00:00:39,820 and synchronous simply means 14 14 00:00:39,820 --> 00:00:42,950 that the code is executed line by line, 15 15 00:00:42,950 --> 00:00:45,720 in the exact order of execution 16 16 00:00:45,720 --> 00:00:47,690 that we defined in our code, 17 17 00:00:47,690 --> 00:00:50,420 just like in this small example. 18 18 00:00:50,420 --> 00:00:54,540 So as the first line of code is reached in the execution, 19 19 00:00:54,540 --> 00:00:58,390 it is simply executed in the execution of thread. 20 20 00:00:58,390 --> 00:01:01,460 Now don't worry about this execution of thread. 21 21 00:01:01,460 --> 00:01:03,090 It's not important here, 22 22 00:01:03,090 --> 00:01:05,680 it's just to make a point of synchronous 23 23 00:01:05,680 --> 00:01:07,880 versus asynchronous code, 24 24 00:01:07,880 --> 00:01:10,110 as you will see in the next slide. 25 25 00:01:10,110 --> 00:01:12,990 All you need to know is that the execution of thread 26 26 00:01:12,990 --> 00:01:16,030 is part of the execution context, 27 27 00:01:16,030 --> 00:01:18,910 which does actually execute the code 28 28 00:01:18,910 --> 00:01:21,560 in the computer's processor. 29 29 00:01:21,560 --> 00:01:25,750 But anyway, then the next line of code is executed 30 30 00:01:25,750 --> 00:01:29,360 and then the next one, all in sequence. 31 31 00:01:29,360 --> 00:01:31,820 So each line of code always waits 32 32 00:01:31,820 --> 00:01:35,550 for the previous line to finish execution. 33 33 00:01:35,550 --> 00:01:39,090 Now this can create problems when one line of code 34 34 00:01:39,090 --> 00:01:41,830 takes a long time to run. 35 35 00:01:41,830 --> 00:01:44,810 For example, in this current line of code, 36 36 00:01:44,810 --> 00:01:46,720 we have an alert statement, 37 37 00:01:46,720 --> 00:01:49,810 which creates this alert window. 38 38 00:01:49,810 --> 00:01:52,500 Now, as we've experienced in the past, 39 39 00:01:52,500 --> 00:01:57,500 this alert window will block the code execution, right? 40 40 00:01:57,520 --> 00:01:59,630 So nothing will happen on the page 41 41 00:01:59,630 --> 00:02:02,140 until we click that OK Button. 42 42 00:02:02,140 --> 00:02:03,320 And only then, 43 43 00:02:03,320 --> 00:02:05,990 the code can continue executing. 44 44 00:02:05,990 --> 00:02:09,020 And so the alert statement is a perfect example 45 45 00:02:09,020 --> 00:02:11,000 of a long running operation, 46 46 00:02:11,000 --> 00:02:13,393 which blocks execution of the code. 47 47 00:02:14,290 --> 00:02:17,400 So again, only after we click Okay, 48 48 00:02:17,400 --> 00:02:18,920 the window disappears 49 49 00:02:18,920 --> 00:02:21,400 and the next line can run. 50 50 00:02:21,400 --> 00:02:24,360 So this is hopefully a nice illustration 51 51 00:02:24,360 --> 00:02:27,203 of the problem with synchronous code. 52 52 00:02:28,050 --> 00:02:31,320 Now, most of the time synchronous code is fine 53 53 00:02:31,320 --> 00:02:33,290 and makes perfect sense. 54 54 00:02:33,290 --> 00:02:36,220 But imagine that execution would have to wait 55 55 00:02:36,220 --> 00:02:39,920 for example, for a five second timer to finish. 56 56 00:02:39,920 --> 00:02:42,960 That would just be terrible, right? 57 57 00:02:42,960 --> 00:02:44,250 Because meanwhile, 58 58 00:02:44,250 --> 00:02:46,320 nothing on the page would work 59 59 00:02:46,320 --> 00:02:48,350 during these five seconds. 60 60 00:02:48,350 --> 00:02:50,560 And so that's where asynchronous code 61 61 00:02:50,560 --> 00:02:51,823 comes into play. 62 62 00:02:53,760 --> 00:02:57,210 So this example contains the five-second timer 63 63 00:02:57,210 --> 00:02:59,030 that I just mentioned. 64 64 00:02:59,030 --> 00:03:00,130 And if you want, 65 65 00:03:00,130 --> 00:03:02,540 you can pause the video here for a minute 66 66 00:03:02,540 --> 00:03:05,593 and analyze this code before we move on. 67 67 00:03:06,470 --> 00:03:09,110 Now, anyway, the first line of code 68 68 00:03:09,110 --> 00:03:11,010 is still synchronous here, 69 69 00:03:11,010 --> 00:03:13,400 and we also move to the second line 70 70 00:03:13,400 --> 00:03:15,230 in a synchronous way. 71 71 00:03:15,230 --> 00:03:18,370 But here we encountered the set timeout function, 72 72 00:03:18,370 --> 00:03:22,610 which will basically start a timer in an asynchronous way. 73 73 00:03:22,610 --> 00:03:24,220 So this means that the timer 74 74 00:03:24,220 --> 00:03:27,210 will essentially run in the background 75 75 00:03:27,210 --> 00:03:30,910 without preventing the main code from executing. 76 76 00:03:30,910 --> 00:03:33,810 We also register a callback function, 77 77 00:03:33,810 --> 00:03:36,010 which will not be executed now, 78 78 00:03:36,010 --> 00:03:39,330 but only after the timer has finished running. 79 79 00:03:39,330 --> 00:03:41,830 And we have actually already done this many times 80 80 00:03:41,830 --> 00:03:45,200 before in practice, right? 81 81 00:03:45,200 --> 00:03:46,730 Now this callback function 82 82 00:03:46,730 --> 00:03:50,800 that I just mentioned is asynchronous JavaScript. 83 83 00:03:50,800 --> 00:03:52,680 And it is asynchronous 84 84 00:03:52,680 --> 00:03:56,350 because it's only going to be executed after a task 85 85 00:03:56,350 --> 00:04:00,410 that is running in the background finishes execution. 86 86 00:04:00,410 --> 00:04:02,843 And in this case, that is the timer. 87 87 00:04:03,690 --> 00:04:07,330 So this callback that we just talked about is registered, 88 88 00:04:07,330 --> 00:04:11,440 and then we immediately move on to the next line. 89 89 00:04:11,440 --> 00:04:14,290 So the main code is not being blocked 90 90 00:04:14,290 --> 00:04:18,600 and execution does not wait for the asynchronous timer 91 91 00:04:18,600 --> 00:04:20,880 to finish its work. 92 92 00:04:20,880 --> 00:04:23,700 And that's the big difference between synchronous 93 93 00:04:23,700 --> 00:04:26,000 and asynchronous code. 94 94 00:04:26,000 --> 00:04:29,430 So previously we had to wait for the user to click 95 95 00:04:29,430 --> 00:04:32,560 on the alert window to continue execution. 96 96 00:04:32,560 --> 00:04:34,310 And again, that's because 97 97 00:04:34,310 --> 00:04:37,360 alert is blocking synchronous code, 98 98 00:04:37,360 --> 00:04:39,260 but now with this timer, 99 99 00:04:39,260 --> 00:04:42,030 the callback is actually asynchronous. 100 100 00:04:42,030 --> 00:04:44,230 And so it's only going to be executed 101 101 00:04:44,230 --> 00:04:46,280 after the timer has finished. 102 102 00:04:46,280 --> 00:04:47,750 And so therefore we say, 103 103 00:04:47,750 --> 00:04:49,400 that it's non-blocking 104 104 00:04:49,400 --> 00:04:50,850 because in the meantime, 105 105 00:04:50,850 --> 00:04:53,833 the rest of the code can keep running normally. 106 106 00:04:54,720 --> 00:04:58,900 Now, when the timer finally finishes after five seconds, 107 107 00:04:58,900 --> 00:05:03,210 the callback function will finally be executed as well. 108 108 00:05:03,210 --> 00:05:05,030 So you'll see that this callback 109 109 00:05:05,030 --> 00:05:07,630 runs after all the other code, 110 110 00:05:07,630 --> 00:05:09,230 even though in the code, 111 111 00:05:09,230 --> 00:05:11,640 it doesn't appear at the end. 112 112 00:05:11,640 --> 00:05:14,720 And so basically an action was deferred 113 113 00:05:14,720 --> 00:05:16,340 into the future here 114 114 00:05:16,340 --> 00:05:19,350 in order to make the code non-blocking. 115 115 00:05:19,350 --> 00:05:23,170 And actually we already saw this behavior happening before 116 116 00:05:23,170 --> 00:05:25,600 when we first learned about timers, 117 117 00:05:25,600 --> 00:05:29,020 we just didn't know that this is called asynchronous 118 118 00:05:29,020 --> 00:05:30,543 and non-blocking code. 119 119 00:05:31,490 --> 00:05:34,400 So in summary, asynchronous programming 120 120 00:05:34,400 --> 00:05:36,420 is all about coordinating 121 121 00:05:36,420 --> 00:05:38,560 the behavior of our program 122 122 00:05:38,560 --> 00:05:41,270 over a certain period of time. 123 123 00:05:41,270 --> 00:05:44,400 And this is essential to understand. 124 124 00:05:44,400 --> 00:05:46,820 So asynchronous literally means 125 125 00:05:46,820 --> 00:05:49,420 not occurring at the same time. 126 126 00:05:49,420 --> 00:05:52,913 And so that's what asynchronous programming is all about. 127 127 00:05:53,960 --> 00:05:55,240 All right. 128 128 00:05:55,240 --> 00:05:57,610 Now, as we saw in this example, 129 129 00:05:57,610 --> 00:06:00,250 we need a callback function to implement 130 130 00:06:00,250 --> 00:06:03,480 this asynchronous behavior, right? 131 131 00:06:03,480 --> 00:06:07,030 However, that does not mean that callback functions 132 132 00:06:07,030 --> 00:06:09,930 automatically make code asynchronous. 133 133 00:06:09,930 --> 00:06:13,260 That is just not the case, okay? 134 134 00:06:13,260 --> 00:06:15,900 For example, the Array map method 135 135 00:06:15,900 --> 00:06:18,350 accepts a callback function as well, 136 136 00:06:18,350 --> 00:06:21,460 but that doesn't make the code asynchronous. 137 137 00:06:21,460 --> 00:06:24,570 Only certain functions such as set timeout 138 138 00:06:24,570 --> 00:06:26,880 work in an asynchronous way. 139 139 00:06:26,880 --> 00:06:29,070 We just have to know which ones do 140 140 00:06:29,070 --> 00:06:32,210 and which ones don't, okay? 141 141 00:06:32,210 --> 00:06:35,220 But please understand this very important fact 142 142 00:06:35,220 --> 00:06:37,360 that callback functions alone 143 143 00:06:37,360 --> 00:06:39,830 do not make code asynchronous, 144 144 00:06:39,830 --> 00:06:42,490 that's essential to keep in mind. 145 145 00:06:42,490 --> 00:06:45,470 But anyway, in order to really understand this, 146 146 00:06:45,470 --> 00:06:47,463 let's see another example. 147 147 00:06:49,700 --> 00:06:53,040 So this example is about loading an image. 148 148 00:06:53,040 --> 00:06:56,560 So the first two lines run in a synchronous way, 149 149 00:06:56,560 --> 00:06:58,470 one after the other. 150 150 00:06:58,470 --> 00:07:00,080 Now in the second line, 151 151 00:07:00,080 --> 00:07:02,770 we set the source attribute of the image 152 152 00:07:02,770 --> 00:07:05,440 that we selected in the first line. 153 153 00:07:05,440 --> 00:07:09,650 And this operation is actually asynchronous. 154 154 00:07:09,650 --> 00:07:12,870 So setting the source attribute of any image 155 155 00:07:12,870 --> 00:07:16,130 is essentially loading an image in the background 156 156 00:07:16,130 --> 00:07:19,340 while the rest of the code can keep running. 157 157 00:07:19,340 --> 00:07:21,830 And this makes sense, right? 158 158 00:07:21,830 --> 00:07:24,510 Imagine that it's a huge image, 159 159 00:07:24,510 --> 00:07:26,590 we wouldn't want our entire code 160 160 00:07:26,590 --> 00:07:28,860 to wait for the image to load. 161 161 00:07:28,860 --> 00:07:31,200 And that's why setting the source attribute 162 162 00:07:31,200 --> 00:07:33,350 was implemented in JavaScript 163 163 00:07:33,350 --> 00:07:34,913 in an asynchronous way. 164 164 00:07:35,960 --> 00:07:38,670 Now, once the image has finished loading, 165 165 00:07:38,670 --> 00:07:43,140 a load event will automatically be emitted by JavaScript. 166 166 00:07:43,140 --> 00:07:45,850 And so we can then listen for that event 167 167 00:07:45,850 --> 00:07:47,723 in order to act on it. 168 168 00:07:48,610 --> 00:07:50,460 Listening for the load event 169 169 00:07:50,460 --> 00:07:52,380 is exactly what we do here 170 170 00:07:52,380 --> 00:07:54,490 in the next line as well. 171 171 00:07:54,490 --> 00:07:57,030 So here we use add event listener 172 172 00:07:57,030 --> 00:07:59,170 and to register a callback function 173 173 00:07:59,170 --> 00:08:01,110 for the load event. 174 174 00:08:01,110 --> 00:08:03,670 So just like in the previous example, 175 175 00:08:03,670 --> 00:08:07,160 we provide a callback function that will be executed 176 176 00:08:07,160 --> 00:08:09,250 once the image has been loaded 177 177 00:08:09,250 --> 00:08:11,010 and not right away, 178 178 00:08:11,010 --> 00:08:14,910 because again, all this code is non-blocking. 179 179 00:08:14,910 --> 00:08:16,810 So instead of blocking, 180 180 00:08:16,810 --> 00:08:18,870 execution moves on right 181 181 00:08:18,870 --> 00:08:20,853 to the next line immediately. 182 182 00:08:21,770 --> 00:08:24,730 Then once the image is completely loaded, 183 183 00:08:24,730 --> 00:08:26,840 it's displayed on the webpage 184 184 00:08:26,840 --> 00:08:29,520 and the load event is admitted. 185 185 00:08:29,520 --> 00:08:32,210 And since we're listening for that event, 186 186 00:08:32,210 --> 00:08:35,990 our callback function is finally executed. 187 187 00:08:35,990 --> 00:08:37,430 So once more, 188 188 00:08:37,430 --> 00:08:40,270 we deferred an action into the future 189 189 00:08:40,270 --> 00:08:44,280 making the code asynchronous and non-blocking. 190 190 00:08:44,280 --> 00:08:45,190 All right. 191 191 00:08:45,190 --> 00:08:47,050 And so now at this point, 192 192 00:08:47,050 --> 00:08:49,970 I believe that you have a pretty good understanding 193 193 00:08:49,970 --> 00:08:51,980 of asynchronous code. 194 194 00:08:51,980 --> 00:08:54,160 There's just one more important thing 195 195 00:08:54,160 --> 00:08:55,670 that I need to mention 196 196 00:08:55,670 --> 00:08:58,840 which is the fact that event listeners alone 197 197 00:08:58,840 --> 00:09:01,290 do not make code asynchronous, 198 198 00:09:01,290 --> 00:09:03,490 just like callback functions alone, 199 199 00:09:03,490 --> 00:09:06,540 do also not make code asynchronous. 200 200 00:09:06,540 --> 00:09:08,960 For example, an event listener 201 201 00:09:08,960 --> 00:09:11,210 listening for a click on a button 202 202 00:09:11,210 --> 00:09:14,340 is not doing any work in the background. 203 203 00:09:14,340 --> 00:09:17,040 It's simply waiting for a click to happen, 204 204 00:09:17,040 --> 00:09:18,980 but it's not doing anything. 205 205 00:09:18,980 --> 00:09:23,370 And so there is no asynchronous behavior involved at all. 206 206 00:09:23,370 --> 00:09:26,310 Now what makes this code example asynchronous 207 207 00:09:26,310 --> 00:09:28,500 is simply the fact that the image 208 208 00:09:28,500 --> 00:09:31,720 is loading asynchronously in the background, 209 209 00:09:31,720 --> 00:09:34,040 but not the fact that we are listening 210 210 00:09:34,040 --> 00:09:36,480 for the load events to happen. 211 211 00:09:36,480 --> 00:09:40,420 So what matters is the asynchronous behavior of a task, 212 212 00:09:40,420 --> 00:09:41,820 like running a timer 213 213 00:09:41,820 --> 00:09:43,800 or loading an image. 214 214 00:09:43,800 --> 00:09:45,430 And there are more examples 215 215 00:09:45,430 --> 00:09:48,330 of asynchronous behavior in JavaScript 216 216 00:09:48,330 --> 00:09:51,890 like the Geolocation API that we used before, 217 217 00:09:51,890 --> 00:09:53,750 or Ajax calls. 218 218 00:09:53,750 --> 00:09:57,490 And Ajax calls are probably the most important use case 219 219 00:09:57,490 --> 00:09:59,730 of asynchronous JavaScript. 220 220 00:09:59,730 --> 00:10:02,903 And so let's see what Ajax is all about. 221 221 00:10:04,630 --> 00:10:09,630 So Ajax stands for asynchronous JavaScript and XML, 222 222 00:10:09,910 --> 00:10:12,690 and basically it allows us to communicate 223 223 00:10:12,690 --> 00:10:16,880 with remote web servers in an asynchronous way. 224 224 00:10:16,880 --> 00:10:17,890 Now in practice, 225 225 00:10:17,890 --> 00:10:20,290 we make Ajax calls in our code 226 226 00:10:20,290 --> 00:10:22,250 in order to request some data 227 227 00:10:22,250 --> 00:10:24,690 from a web server dynamically. 228 228 00:10:24,690 --> 00:10:26,810 So without reloading the page 229 229 00:10:26,810 --> 00:10:31,350 so that we can use that data in our application dynamically. 230 230 00:10:31,350 --> 00:10:33,800 For example, right in the next video, 231 231 00:10:33,800 --> 00:10:35,480 we're going to make Ajax calls 232 232 00:10:35,480 --> 00:10:37,930 to request data about countries. 233 233 00:10:37,930 --> 00:10:40,690 And we can then use that data about countries 234 234 00:10:40,690 --> 00:10:42,600 to build a small application 235 235 00:10:42,600 --> 00:10:45,230 that shows us information about the country 236 236 00:10:45,230 --> 00:10:47,220 that we're currently in. 237 237 00:10:47,220 --> 00:10:51,130 And the possibilities and use cases are endless, 238 238 00:10:51,130 --> 00:10:54,120 but more about that in the next slide. 239 239 00:10:54,120 --> 00:10:58,260 For now, let's quickly understand how Ajax works. 240 240 00:10:58,260 --> 00:11:01,330 So let's say that we have our JavaScript application 241 241 00:11:01,330 --> 00:11:03,380 running in the browser, 242 242 00:11:03,380 --> 00:11:05,660 which is also called the Client. 243 243 00:11:05,660 --> 00:11:08,500 And we want the application to get some data 244 244 00:11:08,500 --> 00:11:10,270 from a web server. 245 245 00:11:10,270 --> 00:11:12,660 And let's say the data about countries 246 246 00:11:12,660 --> 00:11:15,110 that I was talking about earlier. 247 247 00:11:15,110 --> 00:11:16,670 So with Ajax, 248 248 00:11:16,670 --> 00:11:20,150 we can do an HTTP request to the server, 249 249 00:11:20,150 --> 00:11:22,160 which has this data. 250 250 00:11:22,160 --> 00:11:25,260 And the server will then set back a response 251 251 00:11:25,260 --> 00:11:27,803 containing that data that we requested. 252 252 00:11:28,690 --> 00:11:32,070 And this back and forth between Client and server 253 253 00:11:32,070 --> 00:11:35,080 all happens asynchronously in the background, 254 254 00:11:35,080 --> 00:11:37,630 just the way we learned before. 255 255 00:11:37,630 --> 00:11:40,810 And there can even be different types of requests, 256 256 00:11:40,810 --> 00:11:43,680 like get requests to receive data 257 257 00:11:43,680 --> 00:11:47,450 or post requests to send data to a server. 258 258 00:11:47,450 --> 00:11:50,120 But there is a whole lecture about this a bit later 259 259 00:11:50,120 --> 00:11:53,650 to really show you how it all works in detail. 260 260 00:11:53,650 --> 00:11:57,300 Now, when we're asking a server to send us some data, 261 261 00:11:57,300 --> 00:12:01,210 this server usually contains a web API. 262 262 00:12:01,210 --> 00:12:04,550 And this API is the one that has the data 263 263 00:12:04,550 --> 00:12:06,610 that we're asking for. 264 264 00:12:06,610 --> 00:12:09,600 So an API is something pretty important, 265 265 00:12:09,600 --> 00:12:11,970 and so let's now see what an API 266 266 00:12:11,970 --> 00:12:14,433 and web APIs actually are. 267 267 00:12:16,550 --> 00:12:18,130 So first of all, 268 268 00:12:18,130 --> 00:12:22,360 API stands for Application Programming Interface. 269 269 00:12:22,360 --> 00:12:24,090 Now in general terms, 270 270 00:12:24,090 --> 00:12:26,950 and on the very high level of obstruction, 271 271 00:12:26,950 --> 00:12:30,250 an API is basically a piece of software 272 272 00:12:30,250 --> 00:12:33,520 that can be used by another piece of software 273 273 00:12:33,520 --> 00:12:36,350 in order to basically allow applications 274 274 00:12:36,350 --> 00:12:38,040 to talk to each other 275 275 00:12:38,040 --> 00:12:40,210 and exchange information. 276 276 00:12:40,210 --> 00:12:44,320 And that's true not only for web development and JavaScript, 277 277 00:12:44,320 --> 00:12:46,770 but for programming in general. 278 278 00:12:46,770 --> 00:12:49,620 Now in JavaScript and web development, 279 279 00:12:49,620 --> 00:12:52,410 there are countless types of APIs, 280 280 00:12:52,410 --> 00:12:54,080 like the DOM API 281 281 00:12:54,080 --> 00:12:56,360 or the Geolocation API 282 282 00:12:56,360 --> 00:12:58,050 that we have been using. 283 283 00:12:58,050 --> 00:13:00,170 So these are called APIs 284 284 00:13:00,170 --> 00:13:03,460 because they are a self-contained piece of software 285 285 00:13:03,460 --> 00:13:05,650 that allow other pieces of software 286 286 00:13:05,650 --> 00:13:07,520 to interact with them. 287 287 00:13:07,520 --> 00:13:10,130 For example, our Mapty application 288 288 00:13:10,130 --> 00:13:12,163 that we built in the previous section. 289 289 00:13:13,120 --> 00:13:15,080 Also, we can always implement 290 290 00:13:15,080 --> 00:13:18,550 a small and simple API in a class 291 291 00:13:18,550 --> 00:13:20,910 where we make some methods available 292 292 00:13:20,910 --> 00:13:22,780 as a public interface. 293 293 00:13:22,780 --> 00:13:23,970 Remember? 294 294 00:13:23,970 --> 00:13:27,160 So again, objects made from a class 295 295 00:13:27,160 --> 00:13:29,370 can be seen as self-contained 296 296 00:13:29,370 --> 00:13:31,750 encapsulated pieces of software 297 297 00:13:31,750 --> 00:13:35,370 that other pieces of software can interact with. 298 298 00:13:35,370 --> 00:13:39,363 And so that fits the definition of API, right? 299 299 00:13:40,250 --> 00:13:44,340 But now let's talk about the important type of API 300 300 00:13:44,340 --> 00:13:46,160 that we are actually interested in 301 301 00:13:46,160 --> 00:13:47,950 when we use Ajax. 302 302 00:13:47,950 --> 00:13:49,600 And that are APIs 303 303 00:13:49,600 --> 00:13:52,760 that I like to call Online APIs. 304 304 00:13:52,760 --> 00:13:54,560 So an online API 305 305 00:13:54,560 --> 00:13:58,820 is essentially an application running on a web server, 306 306 00:13:58,820 --> 00:14:01,600 which receives requests for data, 307 307 00:14:01,600 --> 00:14:05,170 then retrieves this data from some database 308 308 00:14:05,170 --> 00:14:07,780 and then sends it back to the client. 309 309 00:14:07,780 --> 00:14:11,473 So just as we saw in the last slide, right? 310 310 00:14:12,430 --> 00:14:15,220 Now, when building applications in practice, 311 311 00:14:15,220 --> 00:14:19,150 we simply call these online APIs, API, 312 312 00:14:19,150 --> 00:14:23,540 and many people will also call these APIs, Web APIs, 313 313 00:14:23,540 --> 00:14:26,310 or again, just simply API. 314 314 00:14:26,310 --> 00:14:29,700 So the term Online API is actually a term 315 315 00:14:29,700 --> 00:14:31,530 that I came up with myself 316 316 00:14:31,530 --> 00:14:33,380 because the term Web API 317 317 00:14:33,380 --> 00:14:36,053 is actually also used for other things. 318 318 00:14:37,190 --> 00:14:40,950 Now, of course we can build or own Online APIs, 319 319 00:14:40,950 --> 00:14:43,970 but that requires back-end development. 320 320 00:14:43,970 --> 00:14:47,240 So development with servers and databases 321 321 00:14:47,240 --> 00:14:49,090 and all that. 322 322 00:14:49,090 --> 00:14:51,610 And this is something really interesting 323 323 00:14:51,610 --> 00:14:53,790 that you can learn after this course, 324 324 00:14:53,790 --> 00:14:57,370 and I actually have a course on Node.js myself, 325 325 00:14:57,370 --> 00:15:00,320 that you can check out if you're interested. 326 326 00:15:00,320 --> 00:15:02,130 But anyway, for now, 327 327 00:15:02,130 --> 00:15:05,590 we are interested in using 3rd-party APIs. 328 328 00:15:05,590 --> 00:15:09,390 So APIs that other developers make available for us 329 329 00:15:09,390 --> 00:15:11,930 most of the times for free. 330 330 00:15:11,930 --> 00:15:13,430 So let's now imagine 331 331 00:15:13,430 --> 00:15:16,240 that you're building a traveling application, 332 332 00:15:16,240 --> 00:15:19,010 and you have a database with different destinations 333 333 00:15:19,010 --> 00:15:21,550 and tours that you're offering. 334 334 00:15:21,550 --> 00:15:23,220 So on your own server, 335 335 00:15:23,220 --> 00:15:24,970 you could build your own API 336 336 00:15:24,970 --> 00:15:26,500 that can receive requests 337 337 00:15:26,500 --> 00:15:29,520 from your front end application in JavaScript 338 338 00:15:29,520 --> 00:15:31,810 and send back the results. 339 339 00:15:31,810 --> 00:15:33,790 So that would be your own API 340 340 00:15:33,790 --> 00:15:36,330 hosted on your own server. 341 341 00:15:36,330 --> 00:15:39,290 But that alone would probably not be enough 342 342 00:15:39,290 --> 00:15:41,750 to build a complete application. 343 343 00:15:41,750 --> 00:15:45,700 And so you could also use some 3rd-party APIs. 344 344 00:15:45,700 --> 00:15:49,440 And there are really APIs for everything. 345 345 00:15:49,440 --> 00:15:52,370 So in our example, travel application, 346 346 00:15:52,370 --> 00:15:53,780 you could use an API 347 347 00:15:53,780 --> 00:15:56,830 to get weather data in your destinations, 348 348 00:15:56,830 --> 00:16:00,120 data about the destination countries themselves, 349 349 00:16:00,120 --> 00:16:01,550 data about flights, 350 350 00:16:01,550 --> 00:16:03,400 about currency conversion. 351 351 00:16:03,400 --> 00:16:05,350 And you could even use APIs 352 352 00:16:05,350 --> 00:16:08,020 to send emails or text messages 353 353 00:16:08,020 --> 00:16:11,440 or embed Google maps into your applications. 354 354 00:16:11,440 --> 00:16:12,730 So as you see, 355 355 00:16:12,730 --> 00:16:17,300 the possibilities are really endless with APIs, 356 356 00:16:17,300 --> 00:16:19,980 and we can even say that APIs 357 357 00:16:19,980 --> 00:16:22,740 is what made the modern web as you know it 358 358 00:16:22,740 --> 00:16:25,020 possibly in the first place. 359 359 00:16:25,020 --> 00:16:28,850 So using APIs in JavaScript is super popular 360 360 00:16:28,850 --> 00:16:31,220 and everyone does it all the time, 361 361 00:16:31,220 --> 00:16:35,310 and so that's why I'm explaining you all these details. 362 362 00:16:35,310 --> 00:16:36,143 Okay. 363 363 00:16:36,143 --> 00:16:38,040 But now just to finish, 364 364 00:16:38,040 --> 00:16:41,720 let's quickly talk about API data formats. 365 365 00:16:41,720 --> 00:16:46,720 So Ajax stands for asynchronous JavaScript and XML. 366 366 00:16:47,090 --> 00:16:48,350 Remember? 367 367 00:16:48,350 --> 00:16:51,830 So the X there stands for XML 368 368 00:16:51,830 --> 00:16:54,220 and XML is a data format, 369 369 00:16:54,220 --> 00:16:56,250 which used to be widely used 370 370 00:16:56,250 --> 00:16:59,050 to transmit data on the web. 371 371 00:16:59,050 --> 00:17:00,770 However, these days 372 372 00:17:00,770 --> 00:17:04,970 basically no API uses XML data anymore. 373 373 00:17:04,970 --> 00:17:08,170 The term Ajax is just an old name 374 374 00:17:08,170 --> 00:17:11,050 that got very popular back in the day, 375 375 00:17:11,050 --> 00:17:13,200 and so it's still used today, 376 376 00:17:13,200 --> 00:17:16,810 even though we don't use XML anymore. 377 377 00:17:16,810 --> 00:17:19,900 So instead, most APIs these days 378 378 00:17:19,900 --> 00:17:22,560 use the JSON data format. 379 379 00:17:22,560 --> 00:17:26,170 So JSON is the most popular data format today 380 380 00:17:26,170 --> 00:17:29,290 because it's basically just a JavaScript object, 381 381 00:17:29,290 --> 00:17:31,140 but converted to a string. 382 382 00:17:31,140 --> 00:17:32,320 And so therefore, 383 383 00:17:32,320 --> 00:17:34,870 it's very easy to send across the web 384 384 00:17:34,870 --> 00:17:37,370 and also to use in JavaScript 385 385 00:17:37,370 --> 00:17:38,783 once the data arrives. 386 386 00:17:40,150 --> 00:17:41,090 All right. 387 387 00:17:41,090 --> 00:17:44,960 So, now that we know what asynchronous JavaScript is, 388 388 00:17:44,960 --> 00:17:48,120 and also what Ajax and APIs are, 389 389 00:17:48,120 --> 00:17:51,000 let's finally use all this in practice 390 390 00:17:51,000 --> 00:17:53,630 and make our very first Ajax call 391 391 00:17:53,630 --> 00:17:54,963 in the next video. 32600

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