Nella lezione precedente,
abbiamo appreso l'API REST.
Si è visto come gli endpoint API REST
supportano un modo per un'applicazione client per essere in grado di recuperare
i dati dal server o caricare i dati sul server utilizzando le varie operazioni HTTP.
In questa lezione ed esercizio che segue questa lezione,
esamineremo in modo specifico il tipo di supporto che Express
supporta per la progettazione e l'implementazione di un server basato su API REST.
In particolare, vedremo anche il router Express
e come ci permette di suddividere la nostra applicazione e
quindi organizzarla in più mini applicazioni simili a Express-like,
che si combinano insieme per formare l'applicazione Express, in
particolare quando abbiamo a che fare con varie API REST e parti.
Quindi, per riassumere, nella lezione precedente,
abbiamo esaminato REST in dettaglio.
Abbiamo anche esaminato come ogni endpoint è identificato da un URI,
e come possiamo specificare le varie operazioni da fare su
ogni endpoint utilizzando il verbo HTTP appropriato,
GET, PUT, POST, o DELETE.
Ora, in questa lezione,
vedremo come Express supporta lo sviluppo di un server API REST.
Vedremo il supporto di Express per varie questioni come app.all,
app.get, put, post ed delete
e come questi metodi possono essere utilizzati per costruire un server API REST.
All' interno di Express, i vari gruppi di applicazioni possono essere definiti utilizzando l'app,.
e i vari metodi.
Quindi, app.all specifica un'operazione che deve essere eseguita su tutti i vari verbi,
on, in e part.
Quindi, per esempio, in questo esempio,
vediamo che l'endpoint è definito da/dish,
e quindi l'app.all, qualunque sia specificato nella funzione che viene data per app.all,
verrà applicato a tutte le richieste in arrivo.
L' app.get specifica cosa deve essere fatto per le richieste GET e, di
conseguenza, per le
richieste POST, PUT e DELETE che vengono inviate all'endpoint /dish,
come mostrato in questo esempio.
Express supporta anche la definizione degli endpoint con parametri.
Quindi, ad esempio, è possibile specificare un ID piatto specifico, se lo si desidera,
e quindi lasciare che l'operazione venga eseguita per
quel punto finale specifico riferendosi a quel piatto specifico con un determinato ID di piatto.
Quindi, in questo caso, l'ID piatto stesso è
specificato come parametro e il modello utilizzato per questo è,
come si vede in questo esempio,
/dishes/: e quindi si dovrebbe specificare il parametro qui.
Per renderci più facile da capire,
ho chiamato il parametro come dishId in là.
È possibile utilizzare qualsiasi nome di parametro scelto, ma
l'utilizzo di un nome significativo per un parametro semplifica la comprensione del codice.
Quindi, in questo esempio
, il: dishID significa che se emettiamo una richiesta a un endpoint,
ad esempio, /dishes/23,
allora il parametro dishId ci permette di estrarre questo numero 23 in modo che
possiamo operare sul piatto numero 23 all'interno
della funzione che è specificato all'interno di questo metodo qui.
Quindi, in là, il parametro,
il parametro dishId stesso può essere ottenuto utilizzando l'oggetto request su cui
la proprietà params supportata e
la proprietà params supporta tutti i parametri di richiesta in entrata,
e dishId, in particolare,
è uno di quei parametri di richiesta che ,
come mostrato nel codice qui.
Quando si invia una richiesta PUT o POST dal client al server,
spesso si racchiude i dati nel corpo del messaggio che viene inviato al server.
Ora, il che significa che abbiamo bisogno
di un metodo per estrarre informazioni dal corpo del messaggio.
Quindi questo è dove il middleware del parser del corpo per Express è molto utile.
Quindi il parser corpo ci permette di analizzare le informazioni dal corpo del messaggio.
Per utilizzare il parser corpo, come ci aspetteremmo,
avremmo installare il modulo nodo corpo-parser,
e quindi richiederlo all'interno della nostra applicazione Express,
e quindi specificare app.use (BodyParser).
E se il corpo contiene dati nel formato JSON,
puoi dire BodyParser.json, il
che significa che questo analizzerà solo i dati in
formato JSON racchiusi nel corpo di quel messaggio di richiesta.
In particolare, nell'esercizio,
analizzeremo i dati in entrata che vengono inviati sotto forma di una stringa JSON.
Il parser corpo, come ci si aspetterebbe,
analizza il corpo del messaggio e popola la proprietà req.body.
Quindi, sulla richiesta,
la proprietà body conterrà tutto ciò che viene analizzato dal
corpo del messaggio di richiesta dal parser corpo.
Se si sta implementando un'applicazione Express
che supporta più endpoint API REST,
allora ha senso suddividere il codice in
più moduli e quindi utilizzarli per costruire l'applicazione Express complessiva.
Quindi questo dove il router Express viene in nostro aiuto.
Un router Express definisce molte applicazioni Express
e all'interno di tale molte applicazioni Express,
è possibile, ad esempio,
gestire un particolare endpoint API REST in modo più dettagliato,
o un particolare modello di endpoint API REST in modo più dettagliato.
Quindi, ad esempio, possiamo definire un DishRouter come Express.Router,
e quindi DishRouter può quindi gestire gli endpoint.
Quindi, quando esprimi qualcosa come Express.router,
supporta l'endpoint di route.
Uno dei motivi per l'utilizzo del router Express,
come ti renderai conto,
è che se usiamo i
metodi GET, PUT, POST e DELETE dell'app standard,
per ciascuno di questi metodi,
è necessario specificare esplicitamente gli endpoint dell'API REST.
Un vantaggio dell'utilizzo del router Express è che se si
dice il router.route e quindi si specifica l'endpoint,
tale endpoint verrà applicato a tutti i metodi e tutti i vari
metodi GET, PUT, POST e DELETE verbo possono essere concatenati
insieme nel percorso nella definizione del codice per la nostra applicazione.
Vedremo maggiori dettagli di questo nell'esercizio che segue questa lezione.
Con questa rapida comprensione di come Express supporta l'endpoint API REST,
passiamo all'esercizio in cui costruiremo il
loro supporto per l'endpoint API REST /dish.
Come parte della prima assegnazione,
si estenderà ulteriormente
questa applicazione Express per supportare endpoint API REST aggiuntivi,
tra cui /promotions e/leaders.
Se hai seguito i corsi precedenti nella specializzazione,
inizierai immediatamente a capire perché stiamo supportando
tutti questi diversi endpoint API REST dall'altro lato server.