Costruire un Wrapper API compatibile con WordPress fondamenti

Quando si crea un sito Web o un'applicazione Web, è piuttosto comune che sia necessario inserire dati da siti o applicazioni di terze parti. Se quel sito o applicazione ha un'API, questo è un modo eccellente per ottenere i dati necessari. Quindi, diamo un'occhiata a come farlo con WordPress.


Che cos'è un'API?

Prima di entrare nel merito, assicuriamoci di essere in grado di accelerare con un paio di cose, iniziando con quello che è un'API.

Ai fini di questo tutorial, quando diciamo "API" (interfaccia di programmazione dell'applicazione) intendiamo specificamente quali classi di Wikipedia come "API Web":

Un'API Web lato server è un'interfaccia programmatica a un sistema di messaggi di richiesta-risposta definito, in genere espresso in JSON o XML, che viene esposto tramite il web, più comunemente mediante un server Web basato su HTTP.

Per dirla in modo più semplice: un'API è un modo per un'applicazione di chiedere a un'altra applicazione informazioni predefinite nel formato JSON o XML (più spesso), su un URL Web standard.

Fatto? Ok, il prossimo ...


Cos'è un "wrapper"?

Effettuare una richiesta a un'API può comportare una serie di passaggi e si consiglia di aggiungere passaggi aggiuntivi come il controllo degli errori, la memorizzazione nella cache, la convalida, ecc..

Wikipedia definisce una funzione Wrapper come segue:

Una funzione wrapper è una funzione in un programma per computer il cui scopo principale è chiamare una seconda funzione con un calcolo aggiuntivo minimo o nullo. Questo è anche noto come delega dei metodi. Le funzioni wrapper possono essere utilizzate per un numero di scopi.

Quella definizione potrebbe far sembrare un po 'come se i wrapper fossero solo codice ridondante, ma in realtà sono lontani da esso.


Considerazioni importanti

La creazione di un wrapper per un'API ci consente di essere gentili con tutti. Lasciatemi spiegare:

  • Le API hanno spesso un "limite di velocità", che è il numero di volte e la frequenza con cui è possibile contattarle. Il contatto con un'API più del limite di frequenza specificato può farti bloccare e, per informazioni che non cambiano regolarmente, crea un carico non necessario sull'API. Creando un wrapper, possiamo implementare il nostro caching in modo da contattare l'API meno frequentemente.
  • Oltre a ciò, se facciamo una richiesta a un'API con informazioni erroneamente formattate o incomplete, si tratta di una richiesta sprecata. Dobbiamo assicurarci che la richiesta che inviamo sia completa e formattata correttamente, nel miglior modo possibile prima di inviarla.
  • A volte un'API può inviare informazioni che non sono abbastanza formattate nel modo più semplice da usare per noi. Avere uno strato tra lo sviluppatore e l'API consente di massaggiare i dati in base alle necessità prima che lo sviluppatore li ottenga.
  • Gli sviluppatori inoltre non dovrebbero doversi ripetere più del necessario. Se raggruppiamo tutti i passaggi necessari per rendere un'API richiamabile in un wrapper, questo semplifica lo sviluppo utilizzando l'API in questione.

I wrapper rendono le API compatibili con gli sviluppatori e API-friendly.

Quindi le cose particolari che avremo per gestire la nostra API sono:

  • Effettuare una chiamata all'API quando lo sviluppatore richiede informazioni
  • Verifica per garantire che i dati validi vengano inviati all'API
  • Verifica se l'API ha restituito un errore piuttosto che dati utili e trattando di conseguenza
  • Memorizzazione nella cache delle risposte dall'API in modo che se la stessa richiesta viene effettuata in un breve lasso di tempo, non è necessario contattare l'API
  • Regolazione dei dati restituiti per un utilizzo semplificato

Faremo anche queste cose in un modo compatibile con WordPress, come l'utilizzo dei transitori per il caching e wp_remote_request per l'invio delle richieste API.


Costruire la Fondazione

L'API che useremo per questo tutorial è l'API Envato Marketplace. Questa API fornisce informazioni sugli articoli e gli utenti sui marketplace Envato, come ThemeForest, CodeCanyon e altri.

Baseremo il nostro sviluppo su Public Set, visto nella documentazione dell'API di Envato Marketplace. Inoltre, nota la colonna TTL (time to live), che è essenzialmente il "rate limit" per questa API. Poiché i dati cambiano solo con questa frequenza, non c'è motivo di richiedere un determinato set più spesso rispetto al TTL specificato.

Quindi iniziamo a costruire la classe base per comunicare con questa API.

1. Struttura del file

Perché questo alla fine sarà all'interno di un plug-in di esempio, che potremo ottenere in seguito, creeremo quella struttura di file e costruiremo il wrapper API all'interno.

Il nostro plug-in mostrerà i risultati del set di API "random-new-files", quindi chiameremo "Wptuts + Random New". Quindi dentro la tua wp-content / plugins / directory, andare avanti e creare una directory chiamata wptuts-random-nuovo.

Ora all'interno di quella directory, crea una nuova directory chiamata Envato-api-wrapper, e un file all'interno di quello chiamato class-Envato-api-wrapper.php. L'intera directory sarà quindi in grado di essere copiata in altri progetti che devono utilizzare questa API anche in futuro.

2. Classe e principi fondamentali

Apri il * Classe Envato-api-wrapper.php file, e cominciamo.

Per prima cosa, definiamo la nostra classe:

  

Avremo anche bisogno di un modo semplice per testare questo wrapper mentre lo costruiamo, senza dover caricare tutto WordPress. Quindi quello che ho fatto, è solo creare un index.php file nel Envato-api-wrapper directory, con il seguente contenuto:

  

Ora dovresti essere in grado di navigare http: // localhost / wp-content / plugins / wptuts-random-new / Envato-api-wrapper / (sostituisci "localhost" con il tuo ambiente di sviluppo). Tuttavia non dovresti vedere nulla, perché l'involucro non fa ancora nulla. Se si vede comunque un errore, ricontrolla il codice.

Nota: non dimenticare di rimuovere questo file o cancellarlo, prima di passare alla produzione!

3. Dove inviare le richieste

La prima cosa di cui avrai bisogno prima di fare una richiesta a un'API, è l'URL di base da utilizzare. Questo URL avrà quindi varie informazioni aggiunte ad esso prima di inviare la richiesta.

Nel caso dell'API Envato Marketplace, useremo il seguente URL:

 http://marketplace.envato.com/api/edge/set.json

In questo URL ci sono due bit di informazione variabili principali: edgde e impostato.

La posizione di edgde rappresenta la versione dell'API che vogliamo utilizzare e, in particolare, la versione più recente. Sarà lo stesso in tutte le richieste, tuttavia se qualcosa cambia e volevamo usare una versione precedente, potremmo scambiarla per v3 invece per esempio.

La posizione di impostato rappresenta il set di dati effettivo che stiamo richiedendo. La parola "set" è un segnaposto e lo sostituiremo con i dettagli pertinenti quando effettui una richiesta specifica.

Aggiungiamo una proprietà di $ api_url alla nostra classe con questo valore:

  

Si noti che abbiamo indicato che questa proprietà è 'protetta'. Lo abbiamo fatto perché non vogliamo che l'URL venga modificato direttamente da un altro codice al di fuori del nostro wrapper.

4. Fare una richiesta

Prima di provare a fare una richiesta specifica, aggiungeremo un metodo generico alla nostra classe che gestirà ogni richiesta. Lo chiameremo remote_request, e tutto ciò di cui avrà bisogno è un URL per inviare la richiesta a.

 funzione protetta remote_request ($ url) // In primo luogo, se l'URL è vuoto, non inviare una richiesta if (vuoto ($ url)) return false;  // Effettua la richiesta $ request = wp_remote_request ($ url); // Controlla che WordPress sia stato in grado di inviare la richiesta, altrimenti l'errore se (is_wp_error ($ request)) echo $ request-> get_error_message (); restituisce falso;  // Decodifica la risposta in modo che possiamo usarla $ data = json_decode ($ request ['body']); if ($ request ['response'] ['code'] == 200) return $ data;  else return false; 

Nota che di nuovo abbiamo indicato che questo metodo è 'protetta', per evitare che venga chiamato direttamente al di fuori della nostra classe.

Ora per essere in grado di verificare che la richiesta funzioni, aggiungeremo il nostro primo metodo API. In questo caso, andremo con il random-nuovi-files set, che è quello che useremo più avanti nel nostro plugin di esempio.

Aggiungi il seguente metodo alla nostra classe:

 public function random_new_files ($ marketplace) // Crea un URL per questa richiesta sostituendo il segnaposto 'set' con il set e tutti i parametri richiesti. In questo caso, lo slug di un marketplace Envato $ url = preg_replace ('/ set / i', 'random-new-files:'. $ Marketplace, $ this-> api_url); // Invia una richiesta all'API $ results = $ this-> remote_request ($ url); restituire $ risultati; 

Per testare questo nuovo metodo e per estensione il metodo di richiesta API, aggiungere la seguente riga al nostro debug index.php file:

 eco '
'. print_r ($ envato_api-> random_new_files ('themeforest'), true). '
';

Ora dovresti ottenere l'output nel tuo browser in questo modo:

 stdClass Object ([random-new-files] => Array ([0] => stdClass Object ([id] => 4860464 [item] => Empire - Business, Portfolio HTML 5 Template [url] => https: // themeforest.net/item/empire-business-portfolio-html-5-template/4860464 [user] => designthemes [thumbnail] => http://1.s3.envato.com/files/57931279/thumb-html. png [vendite] => 0 [valutazione] => 0.0 [costo] => 15.00) ... [9] => stdClass Object ([id] => 4852371 [elemento] => eplie | Mobile HTML / Css Portfolio Template [url ] => https://themeforest.net/item/eplie-mobile-htmlcss-portfolio-template/4852371 [utente] => cosmincotor [thumbnail] => http://1.s3.envato.com/files/57831617 /thumbnail.png [vendite] => 3 [valutazione] => 0.0 [costo] => 8.00)))

Supponendo che tu abbia visto qualcosa di simile a quanto sopra, significa che funziona e hai recuperato i dati dall'API. Successo!


Successivo: memorizzazione nella cache, gestione degli errori e un widget

Ora abbiamo ottenuto le basi del wrapper, le cose sono in corso. Nella parte successiva, completeremo il wrapper e costruiremo un widget che lo utilizza.

Inoltre, tieni presente che mentre questo wrapper viene creato per l'API di Envato Marketplace, lo stesso concetto (e molto dello stesso codice fino ad ora) può essere utilizzato per creare un wrapper per qualsiasi API RESTful.

Fateci sapere nei commenti quali idee avete per lavorare con API e WordPress.