{"id":231788,"date":"2022-12-24T12:21:00","date_gmt":"2022-12-24T09:21:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231788"},"modified":"2022-11-10T05:13:09","modified_gmt":"2022-11-10T02:13:09","slug":"funzionalita-di-strutturazione-dellapi","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/funzionalita-di-strutturazione-dellapi\/","title":{"rendered":"Funzionalit\u00e0 di strutturazione dell&#8217;API"},"content":{"rendered":"\n<p>Non ho molta esperienza quando si tratta di creare API. Ho fatto una buona parte del lavoro quando si tratta di integrare WordPress con API di terze parti, ma ho dedicato pochissimo tempo alla creazione di un sistema che ha la sua API con cui altri sistemi possono interagire.<\/p>\n<p>Per quanto riguarda quest&#8217;ultimo, in realt\u00e0 sono nel mezzo di farlo (e sto imparando molto). L&#8217;essenza del progetto \u00e8 che esiste un&#8217;app iOS che interagisce con WordPress tramite <a href=\"https:\/\/developer.wordpress.org\/rest-api\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">l&#8217;API REST<\/a> in modo bidirezionale.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160154-61e7069145e53.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160154-61e7069145e53.png\" alt=\"Funzionalit\u00e0 di strutturazione dell&#039;API\" ><\/a><\/p>\n<p>Non vedo l&#8217;ora di condividere di pi\u00f9 su di esso, ma ho bisogno di farlo quando il progetto sar\u00e0 pi\u00f9 avanti.<\/p>\n<p>Ma quando si tratta di lavorare con API di terze parti e quindi di creare componenti di un progetto WordPress che interagiscono con esse, due delle cose che trovo costantemente utili sono:<\/p>\n<ul>\n<li><a href=\"http:\/\/docs.guzzlephp.org\/en\/stable\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">utilizzando una libreria adeguata<\/a> ,<\/li>\n<li>diagrammare il sistema,<\/li>\n<li>separando la funzionalit\u00e0 in parti.<\/li>\n<\/ul>\n<p>E gli ultimi due punti sopra sono ci\u00f2 che sto cercando di coprire in questo post.<\/p>\n<h2>Funzionalit\u00e0 di strutturazione dell&#8217;API<\/h2>\n<p>Nessun codice \u00e8 coinvolto in questo post, ma forse sar\u00e0 una guida su come andare avanti nel tuo lavoro con la strutturazione delle funzionalit\u00e0 API o facendo qualcosa di simile da solo.<\/p>\n<h3>Biblioteche di terze parti<\/h3>\n<p>Lo dico solo perch\u00e9 penso che sia prezioso riutilizzare soluzioni provate e vere che sono state testate (e quindi utilizzate) su tutta la linea in una variet\u00e0 di progetti.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160154-61e706951696d.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160154-61e706951696d.png\" alt=\"Funzionalit\u00e0 di strutturazione dell&#039;API\" ><\/a><\/p>\n<p>Guzzle \u00e8 la mia libreria preferita. S\u00ec, WordPress ha funzioni integrate per comunicare con altri URL, ma c&#8217;\u00e8 di pi\u00f9 che puoi fare con Guzzle (soprattutto per quanto riguarda i componenti della richiesta) che con WordPress.<\/p>\n<p>Certo, questa \u00e8 la mia opinione, ma mi piace lavorarci. <a href=\"http:\/\/docs.guzzlephp.org\/en\/stable\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">E la documentazione \u00e8 solida<\/a>.<\/p>\n<h3>Diagramma del sistema<\/h3>\n<p>Quando lavori con l&#8217;integrazione con API di terze parti abbastanza a lungo, devi abituarti al processo di impostazione del funzionamento del sistema. Di solito, va qualcosa del genere:<\/p>\n<ol>\n<li>creare un client API per connettersi all&#8217;API,<\/li>\n<li>impostare le funzioni necessarie per effettuare le richieste di cui hai bisogno,<\/li>\n<li>analizzare la risposta,<\/li>\n<li>restituirlo all&#8217;oggetto o alla funzione originale che ha invocato la richiesta.<\/li>\n<\/ol>\n<p>Questa \u00e8 un po&#8217; una semplificazione eccessiva (dopotutto, la creazione del client API pu\u00f2 essere un compito in s\u00e9 e per s\u00e9), ma i punti rimangono tutti gli stessi (e potrebbero non creare una brutta serie \ud83e\udd14).<\/p>\n<p>Ad ogni modo, soprattutto, diagrammare il sistema non fa mai male. Questo \u00e8 qualcosa che faccio ancora perch\u00e9 mi aiuta, in un certo senso, ad articolare ci\u00f2 che sto costruendo e vedere se ci sono lacune nel flusso di controllo attraverso l&#8217;applicazione.<\/p>\n<p>Ecco perch\u00e9, se non altro motivo, questo \u00e8 importante: articolare ci\u00f2 che hai intenzione di fare ti aiuta a capire cosa stai facendo e spesso espone lacune nel tuo pensiero che dai per scontate.<\/p>\n<p>Quindi, quando si tratta di progettare un sistema, non dare per scontato di aver capito tutto.<\/p>\n<h3>Separare la funzionalit\u00e0<\/h3>\n<p>Se leggi questo blog da molto tempo, allora sai che sono un fan di seguire tutte le idee di sviluppo della &quot;separazione delle preoccupazioni&quot;.<\/p>\n<p>Questo \u00e8 vero per molteplici ragioni, la pi\u00f9 piccola delle quali non \u00e8:<\/p>\n<ul>\n<li>essere in grado di testare un client API in isolamento,<\/li>\n<li>mantenendo indipendente il codice per la comunicazione con il front-end e il back-end.<\/li>\n<\/ul>\n<p>Quando si dispone di una classe dedicata all&#8217;esecuzione della logica aziendale sui valori, \u00e8 possibile scaricare gran parte della gestione degli errori nella classe intermedia.<\/p>\n<p>Ci\u00f2 significa che la classe principale responsabile della maggior parte della logica aziendale dovrebbe avere esattamente ci\u00f2 di cui ha bisogno per svolgere il proprio lavoro. Ci\u00f2 non significa che non dovrebbe essere presente un controllo degli errori (divisione per zero o qualcosa del genere, sai?), ma significa che i dati possono essere controllati prima ancora che arrivino alla classe principale tramite la classe intermedia.<\/p>\n<p>E non solo pu\u00f2 controllare eventuali informazioni mancanti, ma pu\u00f2 anche segnalare tali errori al front-end.<\/p>\n<h2>Tre punti da ricordare<\/h2>\n<p>Se stai creando un sistema basato su Ajax in WordPress, il punto di tutto questo \u00e8 triplice:<\/p>\n<ol>\n<li>diagramma il sistema che stai creando,<\/li>\n<li>creare una classe interstitial per gestire le informazioni mancanti e segnalare gli errori,<\/li>\n<li>inviare le informazioni complete alla classe aziendale principale solo dopo che tutte le informazioni sono state verificate.<\/li>\n<\/ol>\n<p>Dopo averlo fatto, l&#8217;obiettivo sarebbe che la classe aziendale principale restituisca i valori richiesti senza errori poich\u00e9 saranno stati catturati prima ancora di raggiungerli.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Una guida su come andare avanti nel tuo lavoro con la strutturazione delle funzionalit\u00e0 API o facendo qualcosa di simile da solo.<\/p>\n","protected":false},"author":1,"featured_media":224405,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[896,720,844,865],"tags":[1168],"class_list":["post-231788","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-sviluppatore","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231788","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=231788"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231788\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/224405"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=231788"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=231788"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=231788"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}