API

Application programming interface

Sostanzialmente quando si parla di API si sta parlando di un modo che può usare una applicazione per parlare con un'altra, qui ci concentreremo su un particolare tipo di API molto diffuso attualmente sul WEB: REpresentational State Transfer (solitamente scritto usando l'acronimo REST).

REST

Questo tipo di architettura si presta molto bene all'uso in sistemi client/server come quelle WEB e ha le seguenti caratteristiche:

Altri aspetti comodi di questo tipo di API sono anche:

Moltissimi servizi on-line permetteno di interfacciarsi usando delle API pubbliche che molto spesso sono REST, l'unico inconveniente è che per poterle usare è necessario usare delle chiavi di accesso che vengono concesse ad ogni utente (oppure alle singole applicazioni che si vogliono creare) previa registrazione; questo vale per Facebook, Instagram, Google e tantissimi altri.

GitHub

GitHub permette l'accesso (limitanto il numero di richieste al minuto) anche senza registrazione utilizzando una API REST, questo ci permette di fare alcuni esperimenti.

Come primo esperimento possiamo provare a fare una ricerca per trovare un progetto su GitHub, per farlo seguiamo le idicazioni Search repositories e visto che vogliamo cercare un progetto sui quesitonari scritto in php usiamo la URL https://api.github.com/search/repositories?q=questionario+language:php e inviamo una richiesta GET al server che come risposta ci fornisce un oggetto JSON che elenca tanti progetti (la risposta non viene riportata qui per intero perché è lunga 170kB, quella qui sotto è stata pesantemente scorciata senza però semplificarne la struttura).

{ "total_count": 1, "items": [ { "id": 172317277, "node_id": "MDEwOlJlcG9zaXRvcnkxNzIzMTcyNzc=", "name": "questionario", "full_name": "SoftwareIISGubbio/questionario", "owner": { "login": "SoftwareIISGubbio", "id": 44832441, "url": "https://api.github.com/users/SoftwareIISGubbio", "html_url": "https://github.com/SoftwareIISGubbio", "repos_url": "https://api.github.com/users/SoftwareIISGubbio/repos", "events_url": "https://api.github.com/users/SoftwareIISGubbio/events{/privacy}", "received_events_url": "https://api.github.com/users/SoftwareIISGubbio/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/SoftwareIISGubbio/questionario", "description": "Un sistema per creare e svolgere questionari on line", "fork": false, "url": "https://api.github.com/repos/SoftwareIISGubbio/questionario", "collaborators_url": "https://api.github.com/repos/SoftwareIISGubbio/questionario/collaborators{/collaborator}", "branches_url": "https://api.github.com/repos/SoftwareIISGubbio/questionario/branches{/branch}", "created_at": "2019-02-24T09:10:04Z", "updated_at": "2019-04-17T14:48:56Z", "git_url": "git://github.com/SoftwareIISGubbio/questionario.git", "language": "PHP", "has_issues": true, "open_issues": 20, "default_branch": "master", "score": 17.340122 } ] }

Dall'attributo branches_url della risposta qui sopra possiamo trovare altre indicazioni...

Richiedendo con il metodo GET la URL https://api.github.com/repos/SoftwareIISGubbio/questionario/branches otteniamo

un elenco di raminon è del tutto esatto rami e relative descrizioni lo stato di svilupono, dovresti provare a caricare la URL

Richiedendo con il metodo GET la URL https://api.github.com/repos/SoftwareIISGubbio/questionario/branches/pulizia otteniamo

numero di commitno, dovresti provare a caricare la URL stato del ramo "pulizia" numero di commit nel ramo "pulizia"no, dovresti provare a caricare la URL