[Powered by Google Translate] [Seminar] [A programmeringsruden Introduktion til API'er] [Billy Janitsch] [Harvard University] [Tommy MacWilliam] [Dette er CS50.] [CS50.TV] Hej alle, jeg er Billy, og i dag vil jeg tale om API'er, eller application programming interfaces, specifikt i forbindelse med CS50 afsluttende projekter og den slags. I almindelighed, hvad der er en API? I meget grove træk, er det en slags midt mand, der giver 2 stykker af software til at kommunikere med hinanden. Det er en slags meget bred definition, og er det ikke relevant for hvad vi kigger på. Hvad vi virkelig ønsker, er en slags nyttige middelvej at kommunikere med en slags database sted. Her er et diagram, og dybest set ideen er, at Vi er en ansøgning, og vi ønsker at få data fra en database, men vi ønsker ikke at søge i databasen direkte. I stedet ønsker vi at gå gennem denne slags midt mand, API. Ideen bag dette er tallene 2 og 3 i diagrammet begge vil være meget kompliceret og rodet. Med andre ord, når API forespørge databasen det er sandsynligvis skal bruge SQL-tabeller og alle den slags ting, og vi har lært en smule om det i CS50, men samlet, De har bemærket, at det er lidt af en smerte. Det får meget, meget kompliceret og rodet, især når du laver komplekse forespørgsler og den slags ting. Hvad vi virkelig ønsker, er en form for nyttig og enkel måde at få disse data, og det er ideen bag tallene 1 og 4 på kortet. Med andre ord ønsker vi en meget simpel måde at fortælle API hvad man kan få for os og en meget simpel måde at få disse data tilbage. Der er én vigtigste måde, at data, der normalt bliver sendt og modtaget, der er JSON eller JavaScript Object Notation. Det kan variere en lille smule så langt som, hvordan du sender anmodningen til API. Med andre ord, hvis du ønsker nogle vis mængde data hvordan du fortælle API for at få disse data kan variere en lille smule. Normalt er det består i at stille en slags net anmodning. Med andre ord, at få adgang til nogle slags URL kommer til at fortælle API præcis, hvad du vil, men de data, er næsten altid sendes tilbage, med andre ord. nummer 4 i JSON Hvad er JSON præcist? Som jeg sagde, JavaScript Object Notation. Det er dybest set den universelle standard for at sende og modtage data. Ideen er, at du har disse 3 kategorier af ting. Du har arrays, hashmaps og primitiver. Arrays og hashmaps du har kigget på en lille smule i CS50, men du har slags fået en meget snæver forstand af, hvad de er. Med andre ord, du med arrays vide, at de er skrive bundet, så du kun har én slags af typen, der går gennem hele array. JSON er meget mere lempelig med den slags ting. Dybest set er idéen dig konstruere dette objekt, som kan være sammensat af ethvert af disse tre ting og kan være sammensat af flere dem af dem, og de kan indlejres. Her er slags et eksempel på JSON, der er disse krøllede parenteser her repræsentere din HashMap, og en HashMap er dybest set en afbildning af en form for central til en form for værdi. Du vil se her, at vi har den egenskaber nøgle, og det er kortlægning på et array, der er det hele. Vi ser et andet element i HashMap, som er denne nøgle isAwesome, som kort til en primitiv værdi af sand, med andre ord, en booleske. Primitiver kan være strenge. De kan være heltal. De kan være bools, noget i den retning. Og du kan se indholdet af denne array, ejendomme peger på har 2 strenge i det, self-lignende og vidunderlig. Det er 2 egenskaber JSON, og vi ser, at JSON er awesome. At se på det lidt nærmere Jeg har tænkt mig at konstruere et mere komplekst eksempel på JSON her. Lad os starte med et array, for eksempel blot en tom array. Men det er slags kedeligt, så vi kommer til at fylde det lidt op, og som jeg sagde, er arrays i JSON skrive bundet, så vi kunne også have en snor her, som er hi, og det er et andet element i denne array. Og på samme måde, kunne vi tilføje en hashmapping her, som kommer til at have et par mappings. Det kommer til at have en kortlægning fra navn til strengen Billy. Vi har en kortlægning fra navn til Billy, og vi har en kortlægning af yndlingsfarve til blå. Det er dybest set et godt eksempel på JSON. Det slags kommer i-Ups, har brug for et komma der-alle de forskellige dele af det. Igen, det er ikke skrive bundet på alle, så du kan have nogen form for typer inde i noget, du ønsker, og idéen er at det er selv-lignende. Med andre ord er det her en JSON objekt, som er det hele, som er netop dette, så du kan få en primitiv være et objekt, en matrix være en genstand eller en HashMap være et objekt. Som du kan slags se, er JSON virkelig, virkelig nyttige i at det er så alsidigt. Du kan få eventuelle data, som du kan forestille gemt i JSON. Det gør det en virkelig rart sprog til brug med API'er fordi det temmelig meget betyder, at ligegyldigt hvilke data, du vil der kommer til at være en måde at få den tilbage i JSON. Et par egenskaber, der gør JSON særlig godt for denne slags ting. Som du kan se, i forhold til en masse ting, du har arbejdet med i CS50 Det er forholdsvis meget let at læse og også meget let at skrive. Du kan led det ud, hvis du vil have, som jeg gjorde i dette eksempel, som giver dig en dejlig, smuk version, som du kan se rigtig godt. Men i øvrigt er det også let at læse og skrive til en computer. Med andre ord er det nemt at parse og let at kode, hvilket betyder, at det er temmelig hurtigt så langt som at læse dataene angår, og JSON kan genereres virkelig hurtigt. Det er også meget let at få adgang til forskellige dele af JSON og den slags ting. Det er rart, og desuden er det faktum, at det er selv-lignende, med andre ord, det faktum, at du kan have JSON i JSON i JSON er virkelig rart for lagring af data. En anden del, der generelt er virkelig nyttige i at arbejde med API'er er jQuery. Du har lært en lille smule af JavaScript, som er en pæn måde at manipulere HTML og CSS i et website. Men det kan slags være en smerte at kode i et almindeligt JavaScript, hovedsagelig fordi JavaScript er en virkelig detaljeret sprog. Du er nødt til at lære en masse syntaks, og bare for at gøre meget simple ting det tager en masse kode, så jQuery er et bibliotek for JavaScript. Med andre ord er det en JavaScript-fil, som du kan indlæse og derefter bruge jQuery funktioner til at gøre visse ting. Og jQuery dybest set gør dit liv en hel del lettere. Det forenkler hvad der ville tage hundredvis af linjer i JavaScript ned til et par linjer i jQuery. Det er især nyttigt, hvis du bruger API'er, fordi generelt hvordan du skal få adgang til API'er er ved at gøre AJAX anmodninger, og jeg tror, ​​David har nævnt i foredrag, at AJAX anmodninger er generelt, når man laver et netværk anmodning til en slags server og komme tilbage en slags data og opdatering af en side øjeblikkeligt. Betragtninger i almindeligt JavaScript, der ville tage skøre antal linjer at validere alle de overskrifter og gøre alle den slags ting, jQuery har en meget simpel funktion kaldet AJAX, og alt hvad du skal gøre i AJAX er at give de parametre, som du ønsker at give API, placeringen af ​​API og enhver yderligere form for indstillinger, som du vil konfigurere. Det er virkelig, virkelig rart og meget nyttigt for denne slags ting. Det er alt, vi har brug for at begynde at få vores hænder beskidte i API'er. Jeg har tænkt mig at opdrage et par eksempler og udforske deres forskellige egenskaber og hvorfor de er nyttige for forskellige former for ting. Den første ting, jeg vil faktisk vise dig er noget, jeg arbejder på på min forskning lab, er der en Ngram Viewer, og dybest set ideen om et Ngram Viewer er du kan søge efter en slags ord eller en sætning og se, hvor ofte det er dukket op i et bestemt sæt af tekst over tid. Dette eksempel her er dette datasæt af babyer der blev født i New York mellem 1920 og 2000. Vi kan søge, for eksempel til navnet Jennifer, og vi kan se, at pre-1960'erne det virkelig blev ikke brugt så meget, og derefter som vi kommer ind i de senere år det bliver brugt mere og mere. Vi kan også gøre sammenligninger, så hvis man sammenligner Jennifer til for eksempel Thomas, vi kan se Thomas har været temmelig udbredt i hele historien, hvorimod Jennifer er en nyere navn. Vi kan gøre den slags ting. Hvordan virker denne ansøgning arbejde? Dybest set, det virker via en API. Med andre ord har vi visse parametre her. Vi har parametrene for, hvad vi faktisk søger efter, der er disse navne, og så har vi et par andre egenskaber, som Y-aksen og X-aksen. Du kan se, vi har et par forskellige muligheder for så vidt angår tidsopløsning at bruge, og den slags. Vi har disse muligheder så vidt, hvad data, vi egentlig ønsker fra databasen, og vi ønsker at få disse data tilbage på en eller anden nyttig måde. Normalt, hvis vi var forespørge databasen direkte ville det sortere af være en smerte at gøre fordi formodentlig disse data om baby navne bor i nogle database eller andet sted, og det ville være virkelig kompliceret at skulle forespørge den manuelt og beslutte præcist, hvilke data til at vende tilbage. Med andre ord, vi kun interesserer os for Jennifer og Thomas i dette tilfælde, og vi kun bekymre sig om på en bestemt akse og alle den slags ting. Hvordan kommer vi omkring dette? At grave i denne API lidt mere Jeg vil vise dig et andet eksempel på denne platform som anvender en lidt anderledes datasæt. Dette datasæt, i stedet for at være baby navne, er faktisk bare det hele udskrive publikationsdatabase af Open Library, hvilket er en kæmpe kilde til tekster offentliggjort gennem de sidste 100 år eller så. Ideen er, at vi har denne compository af millioner og millioner af tekst, som vi nu kan søge efter forskellige ord og sætninger i. Her er et eksempel, der varierer lidt anderledes fra det foregående eksempel Jeg viste dig, som er, at vi har disse 3 søgeforespørgsler, krig, krig og det franske ord for krig, som er guerre. Og vi søger inden for 3 forskellige dele af den samlede database. Med andre ord, vi i denne første forespørgsel er kun søger i USA, i den anden kun i Storbritannien, og den tredje kun fra værker udgivet i Frankrig. Vi ser nogle interessante mønstre opstår. For eksempel ser vi lige her omkring som- Ups, jeg rodet op aksen en lille smule, men du kan se til højre i denne serie her omkring borgerkrigen er der et stort spike i den amerikanske udgave men ikke så stor en stigning i de to andre, og det er selvfølgelig fordi den amerikanske borgerkrig skete på det tidspunkt. Vi kan se nogle seje ting der, men hvad vi virkelig bekymrer sig om, er, hvordan vi fik disse data. Jeg tager dig med bag kulisserne i denne app i en lille smule. Et lille trick er, hvis du arbejder med stedet og slags ønsker at vide hvad der foregår bag kulisserne, kan du åbne op udviklerværktøjer. Jeg har tænkt mig at bruge Chromes udviklingsværktøjer, og at komme til dem, du kan gøre kontrol, skifteholdsarbejde, J, og det tager dig til JavaScript-konsol. Der er et par faner her. De kan alle være ganske nyttigt under forskellige omstændigheder, men jeg ligeglad med netværket Fanen lige nu, og jeg faktisk nødt til at genopfriske at få det arbejde. Åh, undskyld. Den kan lide at give en tilfældig eksempel. Okay, vi bruger dette eksempel i stedet dengang. Tanken er at der er denne API her, og du kan se præcis, hvad API er på vej tilbage. Dette er hvad programmet er at komme tilbage fra API har sendt denne anmodning. Lad mig zoome ind en lille smule, og vi kan stort set se det er bare en række centrale værdipar i JSON. Med andre ord har vi denne HashMap her, kortlægning værdier. Med andre ord, er det kortlægning år værdier. I 1765 uanset ord vi oprindeligt søgte bruges 90 gange ud af 1 million, så vi får tilbage dette resultat. Det er ikke ligefrem JSON da vi har denne lille resultat header her, men bemærk, at hele denne objekt her er bare en stor, stor JSON blob. Vi har et array her som indeholder hele dette element, og du kan se, at hele elementet ender der, og så har vi en anden stor element der går hele vejen ned til enden, og det slutter her. Vi har et virkelig stort array med 2 objekter i det, og hver af disse objekter er en HashMap. Du kan se inden for hver af disse hashmaps har vi en kortlægning af dette indeks værdi til 0, og denne værdi er værdi til en anden HashMap, som igen er kortlægning X-akseværdier til Y-aksen værdier. Du kan se JSON bliver lidt kompliceret smule, men samlet set det er faktisk meget nyttigt, og det er meget let at få adgang i forhold til andre forskellige former for notation. Så vidt hvad vi faktisk sender data til API til at få, Jeg har tænkt mig at gå ind i bagenden en lille smule her. Dette er den store JavaScript-fil, der er behandling af alle de interaktioner af web app, og så vi er ligeglad med det meste af det, men vi virkelig bekymrer os noget af det. For eksempel, bekymrer vi os om denne buildQuery funktion, og tanken om denne funktion er dybest set det ser rundt på siden, finde ud af hvad brugeren ønsker at forespørge, med andre ord, kontrol af disse bokse, hvor de har input deres søgetermer, kontrollere de forskellige Y-og X-akse værdier, som de har valgt, og alle af den slags, og det kommer til at spytte ud denne forespørgsel værdi, som jeg kan derefter sende ud til API. Det ser kompliceret ud, og det er temmelig kompliceret men hvad jeg har tænkt mig at gøre, i virkeligheden, jeg allerede gør dette, hvilket er store- er, at jeg har tænkt mig at få konsollen til at udskrive præcis den pågældende forespørgsel værdi at det er at sende afsted til API. Det er faktisk lige her. Beklager, det udsender en masse ting. Men dette er, hvad vi bekymrer os om, dette objekt lige her. Dette er den forespørgselsobjekt. Med andre ord er dette præcis, hvad web-applikation sender til API, og så lad os se inde i en lille smule, og vi se, vi har et par værdier her. Vi ser vi denne tæller type, der er hændelser per million ord, hvilket er præcis, hvad vi har valgt i Y-aksen herovre. Det er, hvor det kommer fra. Vi har en database værdi, hvilket betyder, at der er en bestemt database at disse data lever i, og vi ønsker at få adgang til disse data specifikt i modsætning til de baby navne data, for eksempel. Så har vi dette grupper værdi, som siger, at vi ønsker at søge efter år i modsætning til alle andre X-akse værdi. Så har vi en metode, som nogle API'er vil gøre flere ting. Med andre ord kan denne API også returnere andre former for data, men i dette tilfælde ønsker vi, at kortlægningen af ​​X-akseværdier til Y-aksen værdier. Det er, hvad der er at fortælle den at gøre der, og vi har denne søgning grænser array, som indeholder 2 værdier. Den første er det, vi ser her, som er alle værdierne indeholdt i det første lille boks øverst. Med andre ord ønsker vi at kigge efter ordet kamp, ​​og vi ønsker at filtrere det af engelske tekster inden amerikansk litteratur. Vi har dette land, der er USA. Vi har et sprog, som er engelsk, så vi har alle disse forskellige dele , der alle fortæller API præcis, hvad vi ønsker. Vi ved ikke, hvad de data, vi får tilbage er endnu, men vi ved, at dataene kommer til at tage en bestemt form. Dette eksempel er slags på den komplicerede side, og du ville ikke nødvendigvis være ved hjælp af en API dette kompleks, men dette er at vise dig området og magt hvad API'er kan gøre. Med andre ord, vi bruger en forholdsvis simpel forespørgsel ordningen i princippet har en tekstboks med et par andre vælgere i forskellige steder. Lad mig ind herude. Vi har en tekstboks med et par forskellige metadata markeringer, og vi har Y-aksen og X-aksen markeringer. Vi har faktisk ikke, at mange områder, og vi kan se meget nemt vi kan forespørge en slags API og få data tilbage og derefter sætte det ind i dette skema, som derefter kommer til at vise det i en brugbar måde. At se på et andet eksempel, som kunne være en smule mere velkendt for jer vi kommer til at henvende sig til Facebook. Facebooks API kaldes Facebook Graph, og dybest set, hvad det betyder, er Facebook ser sig selv som denne massive database af masser af forskellige dele, der alle har visse relationer til hinanden. Med andre ord er jeg en bruger på Facebook, så jeg har en profil, og jeg har også nogle venner, og hver af dem har en profil, og hver af mine venner har en væg, som har andre kommentarer til det, og hver af disse bemærkninger har sympatier og alle den slags ting. Der er masser af forskellige dele til Facebook. Det er et enormt kompleks API, og der er tonsvis du kan gøre med det, men det er faktisk ret simpelt at bruge. Jeg har tænkt mig at starte ud ved at gå til graph.facebook.com / billyjanitsch, som er min unikt kontonavn, og dit kontonavn vil enten være en slags ord, hvis du har valgt det, eller det kan bare være en streng af tal. Hvad vi kommer tilbage er temmelig grundlæggende information. Vi ser, at jeg har et fornavn, der er Billy, et efternavn, der er Janitsch. Der er en unik Facebook ID, som jeg har. Du kan se, at jeg er mand, og at jeg har min sprogindstilling til britisk engelsk. Med andre ord, vi ser meget grundlæggende information her. Det er ikke for meget, men det giver os en idé om, hvad der er. Vi kan gøre det samme for David Malan, for eksempel. Jeg tror hans navn er dmalan. Vi ser David Malan har et unikt ID. Han har et navn, fornavn, mellemnavn, efternavn. Vi ser også, at han er mand og har sit sprog indstillet til amerikansk engelsk. Med andre ord, vi ser temmelig grundlæggende information her. Nu, hvad sker der, hvis vi forsøger at kontrollere ud af noget andet? Lad os sige, jeg er interesseret i, hvad David Malan har ønsket på Facebook. Jeg kan gøre / kan lide. Nu har vi løbet ind i et problem. Vi har fået en slags fejl, der siger en adgang token er forpligtet til at anmode denne ressource. Men hvis du tænker over det, der rent faktisk giver mening, fordi det ville være underligt hvis du kunne få adgang til hver eneste del af Facebooks database bare fra en slags simpel API, vel? Med andre ord, dine oplysninger formentlig ikke kan tilgås af alle, der ønsker det. Denne fejl er netop, hvad det betyder. Nogle API'er kræver visse tilladelser for at få adgang til deres data. Og endnu mere avanceret API'er, ligesom Facebook én, vil kræve visse tilladelser til at gøre visse ting. Jeg kan se dette grundlæggende oplysninger om David Malan. Jeg kan se, at han er mand, og at han bor i USA, men jeg kan ikke rigtig se noget forbi det. For at omgå dette for nu, Facebook har denne nice værktøj som er grafen API Explorer, og tanken om det er du kan sortere i fyldes op tilladelser til dig selv baseret på din egen konto og derefter se ting, som specifikt din konto kan se. For eksempel, graph.facebook.com/billyjanitsch/likes- hvis jeg gør Ups, jeg tror jeg er nødt til at forny min token her. Okay. Hvis jeg gør det igen, stor, nu kan jeg se, at jeg får dette objekt tilbage som siger, at jeg gerne pulje nudler, som er i kategorien spil og legetøj. Jeg kan godt lide hvalrosser, som er i kategorien Animal. Det er min egentlige Facebook lide. De er lidt pinligt. Men vi kan se disse data er alle tilbage i JSON. Det er temmelig læsbar. Med andre ord har vi denne mapping af data til en form af en matrix, og hvert element i dette array er en HashMap der kortlægger navnet på en lignende og den kategori af en lignende. Hver lignende har et unikt ID. Der er alle mulige forskellige ting af data, som vi kan få, og hvis du er interesseret i at bruge Facebook API for et CS50 afgangsprojekt eller for noget lignende, det er faktisk ganske doable. Dybest set, hvordan du får omkring autentificering ting er Facebook anvender et system kaldet OAuth, eller Open Authentication, og jeg ønsker ikke at komme ind i det nu, fordi OAuth eller anden type af autentificering tendens til at variere meget mellem forskellige API'er, så jeg kunne bruge lang tid på at gå over hver enkelt, men de er faktisk temmelig selvforklarende. Hvis du Google Facebook API er det meget læsbar. Der er en hel spec. For eksempel er dette i dokumentationen til den Facebook API, og du kan se jeg er på User side, så jeg kan lære alt om de forskellige slags ting der er til rådighed for at komme så vidt som data og også de forskellige tilladelser, som jeg har brug for at kunne få adgang til dem. Som vi så, behøver vi ikke tilladelse til at få adgang til det navn eller køn, men ud over at vi har brug for tilladelser til de fleste ting. Denne side, eller rettere, denne hjemmeside vil også fortælle dig, hvordan du får en token for at kunne identificere dig. De fleste autentifikationssystemer bruge nogle form for token hvor du får denne unikke værdi, som er en virkelig lang og tilfældig streng, og på den måde de kan associere anmodningen om, at du gør med dig. Med andre ord, ved de, at du ikke laver noget mistænkeligt med deres data. De ved præcis, hvad du får. De ved også, at du har tilladelse til at se denne information. Hvis du har lavet en Facebook app og din app har visse brugere, og disse brugere har tilladt, at app få adgang til visse dele af deres profil, så uanset hvad API nøgle eller token, at app bruger vil være i stand til at få adgang til data for disse brugere. Dette lyder måske kompliceret, men det er ikke alt for dårlig, og hvis du ønsker at bruge Facebook vil jeg stærkt anbefale, at du overveje at spille rundt med deres API. Det er meget cool, og du kan gøre en masse forskellige ting med det. Hvis brugeren giver dig disse tilladelser, kan du endda gå tilbage til API og sige, at jeg vil faktisk skrive i denne brugers væg, eller jeg vil have dem sende et foto, og det er derfor på din news feed du sommetider få de irriterende ting siger din ven har set denne video på en slags underlige websted eller noget lignende. Det er fordi, at app har fået adgang til at sende på den pågældende persons væg. Ideen er den samlede Facebook API temmelig kompliceret, men også virkelig nyttige. Absolut værd at tjekke ud, hvis du stadig leder efter en afsluttende projekt. En anden suite af API'er, som jeg har tænkt mig at gå over er CS50 API'er. Lad mig zoome ind her. CS50 har faktisk sat sammen af ​​en hel række af API'er som du kan bruge til et afsluttende projekt eller bare til noget, du laver. Og de er for det meste Harvard relaterede, og de varierer fra HUDS menuen, for eksempel til denne Harvard Events API, der vil lade dig få adgang til en liste over forskellige begivenheder, der foregår på Harvard og den slags ting. Og så vi kan klikke på et hvilket som helst af disse og få en spec for det, som du vil være i stand til at finde for enhver API, og idéen er det lader dig vide, A, specifikt, hvad at anmode fra API, og hvordan man anmoder om det. Med andre ord, hvis jeg ønsker, at alle begivenheder, der sker i morgen så jeg er nødt til klart at give det denne dato, at jeg ønsker i et bestemt format, og B, vil den fortælle mig præcis, hvad det kommer til at give noget tilbage til mig. Det vil sige, at jeg har tænkt mig at sende dig denne JSON objekt, eller som du kan se, er der forskellige formater. Du kan også returnere dataene som en CSV, for eksempel. Men du ved præcis, hvordan dataene kommer til at se ud, når du får den tilbage så du kan forvente at gøre visse ting med det. Vi kan rulle ned og se, for eksempel, hvis vi ønsker at søge i API at få en kalender, så kan vi bruge denne særlige webadresse og give det nogle parametre, der kommer til at være de data, vi ønsker nøjagtigt. Og på samme måde, hvis vi ønsker, at de data tilbage i et bestemt format, så kan vi bede den om at udlæse data i en CSV, og det er bare en anden parameter, som vi passerer til API. Masser af smarte ting at gøre der. Jeg vil absolut anbefale tjekker CS50 API'er. Jeg har tænkt mig at se på dette Harvard Food API især for en lille smule. En ting jeg har faktisk udviklet, er dette Harvard Noms hjemmeside, som anvender CS50 Food API til at hente HUDS menu for dagen. Og til udvidelse skole folk, er HUDS spise service på Harvard. Hvad du får, er denne side, der indeholder alle de måltider for dagen, så ser vi frokost. Vi har et par forskellige kategorier. Vi har bønne og fuldkorn station. Vi har den brune ris station. Vi kan se til brunch vi har disse få fødevarer. Hvis vi klikker på dem, så vi får næringsdeklarationen. Du ser dette er næringsdeklarationen for grapefrugter, hvis du skulle være i tvivl. Og så igen, vil vi kigge ind i bagenden her en lille smule og se, hvad dette gør for at få disse data. Og det viser sig at faktisk ikke være meget kompliceret overhovedet. Denne fil ser lidt rodet, men husk på, at dette er håndtering hele hjemmesiden, og hvis jeg rulle ned ser vi denne ændring data funktion. Nu, bare for at være klar, dette er skrevet i CoffeeScript, hvilket er et sprog, som du sikkert ikke har set før. Men det er temmelig læsbar, så jeg vil gå igennem det, som om det var pseudokode. Skift dato er en funktion, der kommer til at tage i denne dato værdi, og det er også kommer til at tage i en første, som vi er ligeglad så meget. Men det vigtige er, at det har denne dato, og denne dato er den dag, vi vil anmode alle fødevarer for. Og så skal du se, vi har en lille smule af syntaks her, der dybest set parsing denne dato til et læsbart format. Med andre ord kræver API datoen i et bestemt format. Man kan ikke bare sige 16 november 2012 AD. Det vil ikke vide hvad de skal gøre med det. Det ønsker datoen i et bestemt format. Alt, hvad vi laver her er at give det præcis det format, hvilket er et år værdi og derefter en bindestreg, en måned værdi, en anden bindestreg og datoen værdi. Og vi har også sige, at vi ønsker, at de data, der skal output i JSON. Nu vi gør dette AJAX anmodning, og som jeg nævnte tidligere, jQuery har denne super nyttige AJAX funktion, som alt hvad du skal gøre er at specificere nogle få parametre ned her, og det vil give dig tilbage præcis, hvad du ønsker. Vi fortæller det, at webadressen vi ønsker det til at gå til, er dette CS50 Food API, som vi fik fra spec. Vi siger, at vi ønsker, at data i JSON, og at vi vil give det disse data, som vi har defineret op her. Det er den dag, vi ønsker, at de fødevarer for. Og så alt, hvad vi skal gøre, er at definere en slags succes-funktion, som er dybest set, hvad der sker, når API returnerer disse data. Med andre ord har vi pakket op alle de parametre, som vi ønsker, som i dette tilfælde er den dag, vi ønsker det, og det faktum, at vi vil have det i JSON, og vi sendte det ud til API, så nu API siger, okay, her er dine data, jeg fik det tilbage til dig. Vi har succes funktion, hvilket betyder, eftersom API held returnerer nogle data, gør hvad vi gør med den? Og det viser sig, at alt, hvad vi gør, er kalde denne opdatering menufunktion med hvad API er vendt tilbage, så vi kan søge efter det og se, at alt, hvad vi laver er at bruge en masse ny syntaks her at opdatere HTML og indsætte disse nye data. Hvad dette giver, er vi har disse pile på hver side, og vi kan klikke, og nu vi kigger på data for den næste dag og igen til den næste dag, og hver gang det er at opdatere denne dato værdi og forespørge API, komme tilbage nogle data og sætte det ind på webstedet. Igen, kan du se, super, super nyttige. Denne app tog mig et par timer at hacke sammen, og jeg har en smule mere erfaring, naturligvis, men din CS50 afgangsprojekt kan se noget meget som dette. API'er er super stærk for den indsats, de tager. Det sidste, jeg har tænkt mig at gå over er et par mere API'er bredt. Jeg vil ikke komme så langt ind i dem så vidt, hvad de gør specifikt, men jeg vil give dig en idé om, hvad der er derude. 2 virkelig nyttige dem, hvis du er interesseret i dataanalyse eller visualisering eller noget lignende, er Freebase og Wikipedia. Wikipedia-formentlig alle ved-er en gratis online-encyklopædi, og det faktisk har en API, så hvis du vil, for eksempel, få alle teksterne og artikler til blæksprutte du kan meget nemt gøre det. Bare sige hey, Wikipedia API, jeg vil gerne de data, der returneres som denne, og jeg vil gerne det i dette format, og artiklen vil jeg gerne er blæksprutte, og meget hurtigt det vil give dig tilbage disse oplysninger. Det kan være meget nyttigt, hvis du ønsker at gøre en slags webstedet det er en bedre fremviser til Wikipedia eller noget lignende. Freebase er slags lignende, selv om det er en lille smule sværere for så vidt angår API. Freebase er ligesom Wikipedia i, at det er en online-encyklopædi som indeholder masser og masser af forskellige data om alle mulige forskellige emner, men den er gemt i en relationsdatabase, som er lidt anderledes end Wikipedia. Wikipedia har sine artikler og artikler med tilknytning til andre artikler, men for det meste, hvis du ønsker data for blæksprutte, du gå til blæksprutte artiklen, få disse data, og du har en masse tekst om blæksprutter, så det er fantastisk. Freebase arbejder i en lidt mere kompliceret måde at alt er relateret til hinanden. Med andre ord: Hvis leder efter blæksprutter så det har en masse kategorier, der er forbundet med det. For eksempel er det et dyr, det lever under vandet, det har en vis kropstemperatur. Det ved jeg ikke. Og alle disse kategorier er links til andre steder, hvor du kan gå at se tingene med det samme kategori. Med andre ord ville blæksprutte datasæt indeholde et link til de datasæt for alle dyr, og der ville lade mig flytte rundt i databasen virkelig hurtigt. Dette kan være meget nyttigt, hvis du laver noget lignende sammenligninger. Med andre ord, givet en bestemt ting, du ønsker at se hvad det er relateret til og se hvad det er ikke relateret til. Den slags ting. Det kan være nyttigt i en række måder. Hvis du leder efter mere af en udfordring og at være i stand til at gøre nogle mere komplekse ting Jeg ville overveje at tage et kig på Freebase API. Men stort set, Wikipedia er en meget enkel sted at gå så langt som at få information. Et andet sted, at jeg vil se på, er Last.fm, og jeg er faktisk tænkt mig at gå til webstedet i tilfælde nogle mennesker ikke kender, men Last.fm er dybest set en musik smag og henstillinger hjemmeside. Du kan lave en konto. Du kan begynde at uploade musik fra din musikafspiller til hjemmesiden, og dybest set vil det begynde at give dig musikalske anbefalinger baseret på, hvad du lytter til. For eksempel, side-dette, hvis du gå til din profil er mine- du kan se du har en liste over nyligt lyttet til sporene. Du kan se den samlede yndlingskunstnere, alle slags ting, og igen, der er en stor API bag Last.fm,  og du kan bruge den til at gøre masser og masser af virkelig cool ting. For eksempel, vil jeg gå til en vens side, der har denne Last.fm Tools hjemmeside. Dette er faktisk en anden platform, der er bygget på Last.fm API, og det gør en række ret interessante ting. Hvis jeg logger ind med mit brugernavn, for eksempel, Jeg kan bede den om at generere en tag cloud, for eksempel, og hvad der kommer til at gøre, er at give mig tilbage et billede af alle de forskellige genrer og den slags ting, som jeg kan lide at lytte til. Hvordan er det at gøre dette? Meget Dybest set er det at sige til det Last.fm API her er denne bruger. Jeg vil gerne vide genren af ​​hver sang, de nogensinde har lyttet til, og du kan gøre det ved at lave en temmelig simpel AJAX opkald til Last.fm API. Du får tilbage en stor liste, og så selvfølgelig nogle andre ting der bliver gjort at gøre det til et ord sky, men du kan se den samlede det er meget let at få adgang til og meget nem at bruge. Virkelig rart for en række ting. Jeg tror, ​​det er om alle jeg vil sige generelt. En sidste ting jeg vil nævne om API'er i almindelighed er, at vil du sommetider løbe ind i noget, der hedder hastighedsbegrænsende, og tanken om hastighedsbegrænsende er du ikke ønsker at misbruge API'er. Med andre ord, er det virkelig rart, at en masse af disse hjemmesider har API'er at du kan gå til og bruge gratis. Men hvis du laver millioner eller milliarder af forespørgsler om dagen, for eksempel, hvis du sidder fast i en uendelig løkke, der er uendeligt forespørgsler en slags API og komme tilbage en enorm mængde data, selvfølgelig det er ikke godt, så hvad en masse API'er gøre, er at have denne hastighedsbegrænsende funktion der siger, at du kun kan lave 1.000 anmodninger om dagen pr IP-adresse eller noget lignende. Og hvis du laver en masse test og den slags, vil du sommetider løbe ind i det, og pludselig vil lukke dig ud og sige nej, jeg giver dig ikke noget mere data. Hvad du ønsker at gøre, er at spille efter reglerne. Du vil være sikker på at du læser det API spec omhyggeligt. Hvis den har visse regler knyttet til den, ligesom du kan kun lave X forespørgsler om dagen eller du kan kun få adgang til en del af databasen et bestemt antal gange eller noget i den retning du vil være sikker på du holder dig til det. Så længe du spiller inden for disse regler, du skal nok have en virkelig rart tid ved hjælp af API'er. Din overordnede takeaway er API'er er virkelig, virkelig nyttige. Der er en API for næsten enhver stor web service derude. Stort set enhver del af Google Tools Suite, Google Maps, Google Earth, GMail, Google Kalender, alle disse ting har API'er. Du kan bruge dem til både får data fra serveren og sende data til serveren. Med andre ord, at hvis du ønsker at lave en kalender app kan opdatere andens Google Kalender, er der en API til det. Hvis du ønsker at gøre noget, der vil fortælle dig, hvor placeringen af ​​en bestemt adresse er du kan bruge Google Maps API til det. API'er er fantastisk nyttige, og de er overalt. Hvis du er interesseret i en form for idé, der er sikkert en relateret API, som du kan bruge til at få en masse data meget hurtigt og meget simpelt. Hvis du stadig leder efter et projekt eller hvis du blot ønsker at spille rundt med noget i almindelighed er API'er absolut værd at gøre. Tak, og jeg er glad for at besvare eventuelle spørgsmål, du fyre kan have. Okay, mange tak. [CS50.TV]