Condividi tramite



Gennaio 2016

Volume 31 Numero 1

Il presente articolo è stato tradotto automaticamente.

Windows 10 - Uso dell'API REST OneDrive in un'app di Windows 10

Da Laurent Bugnion

Nel Framework precedente, ad esempio Windows Phone 8, il team OneDrive fornito un SDK che è stata abbastanza facile utilizzo, ma non offrono allo sviluppatore la libertà di moltissimi. Ad esempio, il meccanismo di accesso è solo possibile utilizzo di un controllo pulsante incorporato, di cui lo sviluppatore non è stato possibile modificare l'aspetto e il comportamento. Ma la parte più difficile che questa esperienza predefinita non consentiva il codice di essere condivisi tra piattaforme.

A questo punto, tuttavia, il team OneDrive fornisce un'API REST moderno in base alle richieste HTTP (GET, POST, PUT e così via). Questo è un modo flessibile per interagire con l'archiviazione di file enorme cloud e per compilare codice multipiattaforma utilizzando tecniche ben note la condivisione del codice che possono eseguire su tutte le piattaforme Windows e anche in iOS e Android con piattaforme di Xamarin.

Prima di un articolo in due parti illustrerà come sfruttare la nuova API di OneDrive per compilare App Universal Windows Platform (UWP). In primo luogo, si apprenderà come funziona l'API REST, e come gli sviluppatori devono interagire con esso. Si vedrà come l'utente può accedere al sistema tramite oAuth e come possono essere sfruttate operazioni del file system (esplorazione di cartelle, ottenere informazioni sui file, il recupero di contenuto del file, caricamento di file e così via). Si apprenderà inoltre come eseguire operazioni aggiuntive, ad esempio la condivisione di un collegamento a un elemento con gli amici e l'accesso a questa cartella.

Nel prossimo articolo, parlerò del team OneDrive nuova classe PCL (Portable Library), che è che incapsula le operazioni descritte di seguito in una libreria utile che può essere aggiunti alle App UWP, ma anche in altri Framework supportati, ad esempio ASP.NET, xamarin. IOS, xamarin. Android o xamarin. Forms.

Nota: Oltre PCL che può essere utilizzato sulle piattaforme per xamarin. IOS e xamarin. Android, il team OneDrive fornisce SDK nativi per le due piattaforme.

Il codice di esempio

È possibile scaricare codice di esempio da galasoft.ch/s/msdnonedrive. Viene illustrato come una semplice app UWP possibile utilizzare l'API REST di basso livello per eseguire operazioni sul servizio OneDrive. Per dimostrare che il codice è facilmente portabile, la stessa applicazione viene inoltre implementata per xamarin. Android e gli stessi principi possono essere applicati ad altre piattaforme.

Informazioni sulle API REST

API REST utilizzano HTTP come protocollo di trasporto e si basano su metodi del protocollo (GET, POST, PUT, DELETE e così via) e codici di errore standard (riuscita 200, 400 richiesta non valida, 500 Errore del Server e così via). Ogni punto di ingresso API è accessibile tramite un URI univoco che può avere anche parametri. In alcuni casi, un semplice metodo GET e una stringa di query può essere utilizzati per inviare informazioni al servizio e ottenere un risultato, ma è anche possibile creare le richieste più complesse mediante la registrazione di alcuni oggetti serializzati in JSON.

Le API REST stanno diventando sempre più diffuse e gli sviluppatori devono essere soddisfatti su di esso, poiché offre un modo comprensibile per comunicare con i servizi Web. Più importante, consente di generare componenti portabili in c# e per utilizzare questi componenti in tutte le piattaforme supportate. Un altro enorme vantaggio è che HTTP è basato su testo e le richieste possono facilmente passano attraverso i firewall e proxy.

Tuttavia, la comunicazione con metodi di basso livello HTTP può sembrare molto lavoro, soprattutto per gli sviluppatori che non sono abituati con gli ultimi sviluppi nella programmazione asincrona. Creazione di un client asincrono usando i callback non è stato l'esperienza più elegante e per gli sviluppatori a causa di problemi di threading profondità di annidamento e possibili che possono verificarsi. Fortunatamente, due relativamente recenti sviluppi apportate questo molto più semplice per programmatori c#: il componente HttpClient e le parole chiave async/await. Ad esempio, l'accesso alla cartella Musica OneDrive diventa semplice come la creazione di un URI e l'invio di una richiesta GET:

var uri = new Uri(
  "https://api.onedrive.com/v1.0/drive/special/music");
var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
  new AuthenticationHeaderValue("Bearer", AccessToken);
var json = await client.GetStringAsync(uri);

Il codice JSON risultante può essere deserializzato (con la libreria JSON.NET, ad esempio) per ottenere un oggetto .NET utilizzato nell'applicazione. Questo codice (in verità senza account di accesso o degli errori) Mostra come quello che sarebbe un'operazione complessa diventa semplice e fluida. Inoltre, questo codice verrà eseguito funzioneranno su qualsiasi piattaforma che supporta HttpClient, che include Windows Presentation Foundation (WPF), ASP.NET, Windows 10, Xamarin e altro ancora.

La registrazione dell'App

Prima di effettuare una chiamata all'API di OneDrive, è necessario registrare l'app in OneDrive developer center, configurarlo e ottenere la chiave ID Client. Viene descritto il meccanismo di registrazione in bit.ly/1GPBaWL.

Quando si registra la nuova app, assicurarsi di passare alla pagina di impostazioni per le API e l'impostazione "Mobile or desktop client app" a "Yes". Tutte le altre impostazioni possono essere lasciati sui valori predefiniti. Quindi, recuperare l'ID Client dalla pagina Impostazioni applicazione e salvarlo per un momento successivo.

È importante comprendere i diversi termini e per la quale ogni ID è necessario:

  • ID client: Questo è un ID univoco per l'app UWP. È possibile configurare più applicazioni client che si connettono ai servizi di Microsoft con lo stesso ID Client, ma in generale si consiglia di utilizzare un ID Client per ogni applicazione. L'ID Client è collegato alle informazioni dell'app UWP, quali il nome, l'icona e così via. L'ID Client viene generato quando l'applicazione viene creato e non cambia mai.
  • Segreto client: Questo è un identificatore univoco che viene generato quando viene creato l'app UWP. Questo codice può però cambiare nel corso della durata dell'applicazione. Ad esempio, se si ritiene che il segreto Client è stato attaccato, è possibile generare un nuovo aggiornamento di uno, l'App e dei pirati informatici verrà negato l'accesso. Si noti che il segreto Client è in genere utilizzato in Windows server.
  • ID utente e Password: Quando l'utente effettua l'accesso, gli viene chiesto di immettere il nome utente e password. Grazie a OAuth, l'interazione di account di accesso si verifica tra l'utente e OneDrive solo, senza alcuna conoscenza dell'app client. In pratica, questa operazione viene eseguita utilizzando una visualizzazione Web in cui è visualizzata la finestra di dialogo di accesso.
  • Token di accesso: Quando un utente è stato eseguito l'accesso, il servizio di autenticazione restituisce un Token di accesso. Questo token è valido solo per un determinato periodo (60 minuti), dopo il quale l'utente deve accedere nuovamente. Il token deve essere inviato con ogni richiesta, per dimostrare che l'utente è autenticato. Questa modalità di autenticazione è denominata flusso di Token nella documentazione.
  • Token di aggiornamento: Questo token può essere richiesto dall'applicazione e salvato per aggiornare il Token di accesso nel caso in cui è scaduto. Può essere utile se l'applicazione viene utilizzato in modalità in background per molto tempo ed è necessario aggiornare periodicamente i dati senza l'intervento dell'utente. Questa modalità di autenticazione è denominata CodeFlow e viene descritto in bit.ly/1MQ3KOb. In questo articolo, solo utilizzerò flusso di Token, che è più semplice da implementare.

Provare le cose con un Token di prova

Se si desidera provare rapidamente alcune richieste REST senza implementare innanzitutto l'autenticazione, il centro per sviluppatori OneDrive consente di ottenere un token di prova, valido per un'ora, che può essere utilizzata per la procedura seguente:

  • Passare a bit.ly/1MQ3KOb.
  • Individuare la sezione "Verifica ora" e fare clic sul pulsante ottenere Token.
  • Se necessario, accedere e confermare che si autorizza il centro per sviluppatori di accedere all'account OneDrive.
  • L'account di accesso ha esito positivo, verrà visualizzato un token di versione di valutazione nella finestra del Web principale.
  • Creare una nuova app UWP denominata TrialOneDrive.
  • Aprire MainPage. XAML e aggiungere un pulsante denominato TrialButton.
  • Aprire il file MainPage.xaml.cs e aggiungere un gestore eventi per l'evento TrialButton Click come illustrato nel codice in Figura 1. Si noti che questo gestore eventi deve utilizzare la parola chiave "async" perché tutte le operazioni di OneDrive sono asincrone.
  • Nel codice in Figura 1, sostituire la stringa di versione di valutazione del TOKEN con il token di prova copiati dal sito Web di Dev Center. Non copiare le parole "autorizzazione: portatore"!
  • Inserire un punto di interruzione all'ultima riga del gestore eventi per esaminare la variabile JSON.
  • Eseguire l'applicazione e fare clic sul pulsante.
  • Esaminare il codice JSON recuperato in una finestra Espressioni di controllo. Dovrebbe essere possibile visualizzare le informazioni sulla cartella Musica, ad esempio il nome, la data di creazione, data dell'ultima modifica, Conteggio figli, ID della cartella (che può essere usato in varie operazioni del file system in un secondo momento), il nome utente connesso e così via.

Figura 1 aggiunta di un gestore eventi per l'evento clic TrialButton

TrialButton.Click += async (s, e) =>
{
  var uri = new Uri(
    "https://api.onedrive.com/v1.0/drive/special/music");
  var client = new HttpClient();
  client.DefaultRequestHeaders.Authorization =
    new AuthenticationHeaderValue("Bearer", "YOUR TRIAL TOKEN");
  var json = await client.GetStringAsync(uri);
};

Ricordare che il token di versione di valutazione scade dopo un'ora, in modo da non dimenticare di ottenere uno nuovo se si desidera demo su questa applicazione reale.

L'autenticazione OAuth

Ora che si dispone di un'applicazione registrata e comprendere i termini importanti, è possibile implementare l'autenticazione. Ecco i passaggi a tale scopo, illustrati in Figura 2:

  1. L'utente avvia l'autenticazione, ad esempio facendo clic su un pulsante.
  2. L'applicazione controlla se un Token di accesso è disponibile.
  3. In caso affermativo, l'applicazione è già autenticato e l'utente può spostarsi all'operazione successiva. Se non è disponibile alcun Token di accesso, l'applicazione accede a una pagina XAML contenente una visualizzazione Web.
  4. Nella pagina XAML imposta URL iniziale di WebView per caricare la pagina del punto di fine l'autenticazione. Nella pagina XAML sottoscrive anche WebNavigationCompleted evento di WebView, per monitorare il traffico in questo controllo. Si apprenderà come è strutturata l'URL iniziale qualche ulteriore nell'articolo.
  5. La visualizzazione Web carica il codice HTML da endpoint di autenticazione.
  6. L'utente immette il nome utente e password nella pagina autenticazione HTML. Si noti che questa interazione è rigorosamente tra l'utente e il server di OneDrive. Nella pagina XAML funge semplicemente da un contenitore.
  7. L'utente preme il pulsante HTML che invia il form al server di autenticazione. Se l'utente stato concesso, vengono visualizzate pagine aggiuntive per gestire l'autenticazione a due fattori.
  8. Se le credenziali siano corrette, il server di autenticazione reindirizza la visualizzazione Web a un URL specifico che indica un accesso riuscito. L'URL deve anche il Token di accesso come uno dei parametri di stringa di query. Nella pagina XAML rileva che si è verificato il reindirizzamento e consente di analizzare il Token di accesso da nuovo URL di WebView.
  9. La pagina di autenticazione analizza il token di accesso dall'URI reindirizzato.
  10. L'applicazione passa nuovamente alla pagina XAML originale. Il Token di accesso vengono salvato per ulteriori richieste.

Flusso di lavoro OAuth
Figura 2 OAuth flusso di lavoro

Nota: Anche se è importante comprendere il funzionamento di OAuth, gli sviluppatori di Windows 10 sono fortunati ad avere un'alternativa più semplice denominata WebAuthenticationBroker. In questo articolo, utilizzare il meccanismo di OAuth "basso livello" e parlerò WebAuthenticationBroker nel prossimo articolo.

Comprendere gli ambiti

Quando l'utente effettua l'accesso, l'applicazione deve informare il servizio OneDrive la gamma di funzionalità che è necessario. Specificando gli ambiti nell'URL di autenticazione. Il servizio supporta attualmente i seguenti ambiti:

  • Servizio Single sign-on: wl.signin.
  • Accesso non in linea: wl.offline_access. In questo modo l'applicazione di ottenere un Token di aggiornamento. Questo ambito viene ignorato quando viene utilizzata l'autenticazione del flusso di Token.
  • Accedere in sola lettura: onedrive.readonly. In questo modo all'applicazione l'accesso in sola lettura ai file e cartelle. Se l'applicazione tenta di modificare un file o caricare un nuovo file, il servizio restituisce il codice di errore 403 accesso negato.
  • Accesso ReadWrite: onedrive.readwrite. In questo modo l'applicazione di lettura e l'accesso in scrittura ai file e cartelle.
  • AppFolder: onedrive.appfolder. In questo modo l'accesso dell'applicazione la cosiddetta cartella dell'applicazione. Parlerò più in dettaglio in questa cartella speciale più avanti in questo articolo. Si noti che questo ambito viene concessa automaticamente quando si richiede l'ambito readwrite. Tuttavia, la richiesta in modo esplicito il appfolder causa indicata nella finestra di dialogo illustrata questo ambito Figura 3, ovvero una migliore esperienza utente.

Figura 3 avvio l'autenticazione

if (!_service.CheckAuthenticate(
  async () =>
  {
    var dialog = new MessageDialog("You are authenticated!", "Success!");
    await dialog.ShowAsync();
    Frame.GoBack();
  },
  async () =>
  {
    var dialog = new MessageDialog("Problem when authenticating!", "Sorry!");
    await dialog.ShowAsync();
    Frame.GoBack();
  }))
{
  Frame.Navigate(typeof (AuthenticationPage));
};

Dopo che l'utente immette le credenziali nella pagina Web di autenticazione, egli ha dimostrato una finestra di dialogo in cui viene chiesto di confermare le autorizzazioni richieste dall'applicazione, come illustrato nella Figura 4. L'utente può cambiare idea in qualsiasi momento e revocare alcune delle autorizzazioni. A tale scopo, l'utente accede il suo account nel sito Web di OneDrive consente di passare alla protezione e Privacy e seleziona il collegamento di gestione autorizzazioni in applicazioni e servizi. Nell'esempio, si richiederà sempre l'accesso single sign-on, readwrite e appfolder.

Conferma l'autenticazione
Figura 4 autenticazione conferma

Creazione di URL iniziale

L'URL utilizzato per avviare il processo di autenticazione necessario fornire informazioni sull'applicazione stessa, le funzionalità richieste (ambiti), la modalità di autenticazione e l'URI di reindirizzamento.

La modalità di autenticazione può essere Token o codice. In questo articolo e il codice di esempio, ho utilizzato la modalità Token, che significa che l'utente deve verificare l'account di accesso a ogni nuovo avvio dell'applicazione o dopo un'ora. Tutto ciò suona fastidiosa, ma in realtà l'utente è semplicemente verificare l'account di accesso facendo clic sul pulsante Sì nella finestra di dialogo autenticazione, come illustrato nella Figura 4.

L'URI di reindirizzamento è l'indirizzo a cui il servizio OneDrive reindirizzerà l'applicazione quando l'account di accesso ha esito positivo. Per un'applicazione Web, è l'URI di una pagina nella propria applicazione e viene configurato nel centro per sviluppatori OneDrive, nella scheda Impostazioni API. Ma nel caso di un'app UWP, è necessario lasciare vuoto questo campo. È necessario invece un URI di reindirizzamento predefinito:

htt://login.live.com/oauth20_desktop.srf

Combinazione di tutte le parti

Dopo avere appreso come funziona l'autenticazione in base a OAuth, esaminiamo il codice. È possibile seguire nell'esempio di semplice facendo clic sul pulsante Esegui autenticazione.

Utilizzare una classe denominata OneDriveService, che viene implementato in una PCL. Viene creata un'istanza di OneDriveService in App.xaml.cs e passato l'ID Client.

In primo luogo, il MainPage chiede al servizio di OneDrive se si è già autenticato, il che significa che un Token di accesso è già presente. Due delegati è passare alla chiamata al metodo CheckAuthenticate: un'azione che verrà chiamata se l'autenticazione ha esito positivo e un'azione in caso di errore.

Se il servizio non è già autenticato, MainPage utilizza la proprietà di Frame per passare a AuthenticationPage, come illustrato nella Figura 5. Questa pagina è una pagina XAML semplice con una visualizzazione Web che accetta l'intero schermo, in cui l'utente eseguirà immettere il nome utente e password e conferma.

Figura 5 codice per il AuthenticationPage

public sealed partial class AuthenticationPage
{
  private readonly OneDriveService _service;
  public AuthenticationPage()
  {
    InitializeComponent();
    _service = ((App)Application.Current).ServiceInstance;
    Loaded += (s, e) =>
    {
      var uri = _service.GetStartUri();
      Web.Navigate(uri);
    };
    Web.NavigationCompleted += (s, e) =>
    {
      if (_service.CheckRedirectUrl(e.Uri.AbsoluteUri))
      {
        _service.ContinueGetTokens(e.Uri);
      }
    };
    Web.NavigationFailed += (s, e) =>
    {
      _service.ContinueGetTokens(null);
    };
  }
}

Quando viene caricata la pagina, si ottiene l'URI di autenticazione dal OneDriveService:

https://login.live.com/oauth20_authorize.srf?client_id=000000004C169646&
scope=wl.signin+onedrive.readwrite+onedrive.appfolder&response_type=token&
redirect_uri=https%3A%2F%2Flogin.live.com%2Foauth20_desktop.srf

Come illustrato, questo URI esegue tutte le informazioni necessarie, ad esempio l'ID Client, segreto Client, ambito, URI di reindirizzamento e così via.

Si noti che la visualizzazione Web verranno reindirizzate più volte prima del token di accesso, viene restituito. Ecco perché è verificare sempre il reindirizzamento URI nell'evento NavigationCompleted delle WebView. Quando l'URI oauth20_desktop.srf infine viene rilevato, il OneDriveService recupererà il token di accesso dai parametri di stringa di query. Informazioni aggiuntive (scadenza, il tipo di token, ambito, l'ID utente e così via) viene passate nella stringa di query, ma si sta semplicemente verrà ignorato qui. L'URI di reindirizzamento con token di accesso è abbreviata di seguito:

https://login.live.com/oauth20_desktop.srf?lc=1033#access_token=EwB4Aq1D...1iiZA%3d&
token_type=bearer&expires_in=3600&scope=wl.signin%20onedrive.readwrite%20onedrive.appfolder
%20onedrive.readonly&user_id=8e5323e8b7c7a0928d03e10811531234

Dopo che l'utente viene autenticato, l'applicazione può avviare l'interazione con i file e cartelle. In questo articolo, sarà concentrare su alcune operazioni, ma è piuttosto semplice estensione dell'applicazione da includere ulteriori servizi una volta che vengono riconosciuti i principi.

La cartella radice

Innanzitutto parlerò nella cartella radice. In questa cartella è univoca in OneDrive ed è l'elemento padre a ciascuno degli altri elementi di.

Per il OneDrive documentazione, ottenere la cartella radice può essere eseguita utilizzando la seguente richiesta: OTTENERE /drive/root. Questa richiesta restituisce una risposta JSON come descritto in bit.ly/1M5w4NV. La risposta JSON può essere deserializzata e informazioni in che esso contenute possono essere utilizzate per ulteriori richieste.

Struttura di cartelle e file a questo punto, è importante comprendere la struttura del file system. OneDrive si basa su un sistema di facet per fornire informazioni sui file e cartelle. Ad esempio, un file può anche essere un'immagine e una foto e fornire informazioni aggiuntive sul file (ad esempio larghezza/altezza per l'immagine e il modello della fotocamera per la foto). Di seguito sono elencati i facet che sono attualmente disponibili e alcune delle relative proprietà più importanti:

  • Elemento (nome, ID, url di download, padre di riferimento e così via)
  • Cartella (conteggio figlio)
  • File
  • Audio (album, artista, velocità in bit, durata, titolo e così via)
  • Immagine (larghezza, altezza)
  • Foto (fotocamera marca e modello, preso data ora)
  • Video (durata, velocità in bit, larghezza, altezza)

Quando si carica un nuovo file in OneDrive, verrà automaticamente analizzato e verranno aggiunti alcuni metadati. Ad esempio, un documento di Word è semplicemente un File. Ma una foto con una fotocamera una foto e anche un'immagine, oltre a essere un File. Ognuno di questi facet contiene informazioni aggiuntive relative al file, come illustrato nell'elenco.

Quando si analizza il codice JSON ottiene dal servizio OneDrive, è possibile mappare questi tipi di classi c#. Esaminando il codice JSON, si possono facilmente scoprire se un elemento è una cartella, un File, un'immagine, un Video e così via. Ad esempio, Figura 6 viene illustrato un estratto della risposta JSON per la cartella radice. È possibile vedere che la proprietà cartella riporta informazioni conteggio figlio della cartella. Se sono state informazioni su una foto, si vedrà le proprietà di immagine e foto riempite con le informazioni sulla larghezza e altezza e la marca fotocamera e il modello, rispettivamente.

Nell'applicazione di esempio fornito in questo articolo, si esegue la deserializzazione di JSON, le classi contenute nella cartella delle risposte, che viene eseguito il mapping al sistema di facet.

Dopo avere appreso come funziona la risposta, è possibile accedere con facilità le informazioni della cartella radice con il codice riportato di seguito:

var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
  new AuthenticationHeaderValue("Bearer", AccessToken);
var uri = new Uri("https://api.onedrive.com/v1.0/drive/root");
var json = await client.GetStringAsync(uri);
var rootFolder = JsonConvert.DeserializeObject<ItemInfoResponse>(json);

Per visualizzare il codice in azione, è possibile eseguire l'esempio semplice e premere il pulsante Esegui autenticazione e quindi sul pulsante ottenere cartella radice.

Il recupero di elementi figlio della cartella come quello di Figura 6, la risposta contiene solo metadati-informazioni sulla cartella. Si conoscono quanti elementi figlio è la cartella, ma è necessario eseguire un'altra richiesta per ottenere l'elenco di elementi figlio. In questo caso, anche i OneDrive consente di documentazione e gli Stati che si devono richiedono un'operazione GET per /drive/elementi / {id elemento} / figlio, come illustrato nella Figura 7.

Figura 6 risposta JSON per la cartella radice

{
  "createdBy": {
    "user": {
      "displayName": "Laurent Bugnion",
      "id": "fb0d8f9700498123"
    }
  },
  "createdDateTime": "2010-11-27T17:09:25.513Z",
  "id": "FB0D8F97004979CD!ABC",
  "lastModifiedBy": {
    "user": {
      "displayName": "Laurent Bugnion",
      "id": " fb0d8f9700498123"
    }
  },
  "lastModifiedDateTime": "2015-10-04T14:36:36.217Z",
  "name": "root",
  "size": 178558187077,
  "webUrl": "https://onedrive.live.com/?cid=fb0d8f9700498123",
  "folder": {
    "childCount": 18
  }
}

Figura 7 recupero dell'elenco di elementi figlio

var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
  new AuthenticationHeaderValue("Bearer", AccessToken);
var request = string.Format("/drive/items/{0}/children", info.Id);
var uri = new Uri(
  "https://api.onedrive.com/v1.0"
  + request);
var json = await client.GetStringAsync(uri);
var response = JsonConvert.DeserializeObject<ParseChildrenResponse>(json);
return response.Value;

In Figura 7, JSON viene deserializzato in una classe denominata ParseChildrenResponse. Questo viene mappato nuovamente a risposta JSON, che include l'elenco di elementi figlio in una matrice JavaScript denominata value. La classe ParseChildrenResponse è illustrata Figura 8.

Figura 8 ParseChildrenResponse classe

public class ParseChildrenResponse
{
  public IList<ItemInfoResponse> Value
  {
    get;
    set;
  }
  [JsonProperty("@odata.nextLink")]
  public string NextLink
  {
    get;
    set;
  }
}

Poiché ogni elemento figlio è un ItemInfoResponse, si sa come gestire queste e decidere se ogni elemento figlio è una cartella un file, una foto, un file audio, e così via.

Si noti che se si desidera evitare di inserire due chiamate per recuperare le informazioni della cartella e popolare l'elenco di elementi figlio, è inoltre possibile utilizzare la seguente richiesta, che esegue le operazioni necessarie in un'unica chiamata:

 

GET /drive/items/root?expand=children

Paging comprensione quando si accede a una cartella con molti elementi figlio, la risposta inviata dal servizio OneDrive potrebbe essere incomplete e richiedono il paging. Per impostazione predefinita, il servizio restituisce solo un elenco di massimo 200 figli. Se la cartella si Esplora dispone di più, una proprietà viene aggiunta all'elenco di elementi figlio, denominato "@odata.nextLink" e può essere visualizzata Figura 8, nonché. Questa proprietà contiene l'URI per la richiesta successiva che l'applicazione deve eseguire per ottenere "pagina successiva." In un'app UWP è possibile scegliere di chiamare immediatamente il servizio per ottenere la pagina successiva di elementi (che funzionerà OK perché vengono virtualizzati lunghi elenchi), oppure è possibile visualizzare un pulsante più e implementare lo spostamento di pagina nell'app.

Esplorazione una sottocartella dopo aver ottenuto l'ID della cartella, è possibile esplorare con facilità la cartella utilizzando la seguente richiesta:

GET /drive/items/{item-id}

Si tratta di una grande quando si dispone già di ID della cartella, ma talvolta non è possibile queste informazioni. Un'altra sintassi consente di recuperare le informazioni della cartella verrà utilizzato il percorso relativo alla radice. Noterete che questa sintassi in Figura 9.

Figura 9 una sottocartella dal percorso di esplorazione

var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
  new AuthenticationHeaderValue("Bearer", AccessToken);
var request = string.Format("/drive/root:/{0}", path);
var uri = new Uri(
  "https://api.onedrive.com/v1.0"
  + request);
var json = await client.GetStringAsync(uri);
var result = JsonConvert.DeserializeObject<ItemInfoResponse>(json);
return result;

La cartella dell'applicazione

OneDrive ha alcune cartelle speciali, ad esempio musica, documenti, foto e così via. Una delle cartelle speciali è stato introdotto di recente: La cartella dell'applicazione. Si tratta di una cartella speciale è disponibile per l'applicazione, ad esempio per rendere persistenti le impostazioni di roaming, caricare i backup e così via. Si noti che la cartella dell'applicazione non è protetta o nascosti in alcun modo. Infatti, si trova in una cartella denominata app, a destra alla radice di OneDrive dell'utente. Cartella dell'applicazione dell'applicazione ha lo stesso nome dell'applicazione OneDrive, come è stata immessa quando è stato registrato per ottenere l'ID Client Si noti che il nome dell'applicazione potrebbe essere localizzato in lingue diverse, in base alle impostazioni dell'applicazione OneDrive. L'utente dispone dell'accesso completo alla cartella App, tramite il sito Web di OneDrive o in qualsiasi applicazione e può anche eliminare la cartella potrà scegliere.

Prima è stato introdotto il concetto di cartella dell'applicazione, applicazioni erano (e molte sono ancora) salvare le impostazioni e altri file in OneDrive radice o in una cartella personalizzata. Utilizzando la cartella dell'applicazione per questi elementi è molto più chiaro e una migliore esperienza utente. In base alla documentazione di OneDrive (bit.ly/1MBUkS2), la richiesta per ottenere informazioni della cartella dell'applicazione:

GET /drive/special/approot

Come si può vedere, è facile da implementare nella cartella App in tutte le applicazioni!

Download di un File

Quali utilizzare OneDrive sarebbe se è Impossibile caricare o scaricare file? In questa sezione e nella successiva, verrà illustrato come eseguire questa operazione critica, che è estremamente semplice.

Per scaricare il contenuto del file, OneDrive crea un DownloadUrl salvata come una proprietà nella risposta elemento. Si noti tuttavia che l'URL è valido solo per breve tempo, pertanto se è stato memorizzato nella cache le informazioni sul file, potrebbe essere necessario ottenere le informazioni nuovamente dal servizio prima, come illustrato nella Figura 10.

Figura 10 download di un File del contenuto

public async Task<Stream> RefreshAndDownloadContent(
  ItemInfoResponse model,
  bool refreshFirst)
{
  var client = new HttpClient();
  client.DefaultRequestHeaders.Authorization =
    new AuthenticationHeaderValue("Bearer", AccessToken);
  // Refresh the item's information
  if (refreshFirst)
  {
    var request = string.Format("/drive/items/{0}", model.Id);
    var uri = new Uri(
      "https://api.onedrive.com/v1.0"
      + request );
    var json = await client.GetStringAsync(uri);
    var refreshedItem =
      JsonConvert.DeserializeObject<ItemInfoResponse>(json);
    model.DownloadUrl = refreshedItem.DownloadUrl;
  }
  var response = await client.GetAsync(model.DownloadUrl);
  var stream = await response.Content.ReadAsStreamAsync();
  return stream;
}

Dopo aver ottenuto il flusso di contenuto del file, è possibile elaborarli in locale, salvarlo e così via. L'esempio semplice chiede all'utente per un percorso per salvare il file utilizzando un FileSavePicker.

Caricamento di un File

Analogamente, caricamento di un file è piuttosto semplice dopo aver ottenuto il flusso del file. In Windows 10 questa operazione può essere eseguita con un'istanza di StorageFile, ad esempio con un FileOpenPicker. Dopo la lettura del flusso, è possibile caricarlo in OneDrive. In base alla documentazione, è necessario utilizzare un'operazione PUT:

PUT /drive/items/{parent-id}:/{filename}:/content

Il HttpClient supporta il metodo PUT con un'istanza di HttpContent. In questo caso, poiché il flusso di file non elaborato, è possibile utilizzare un'istanza di StreamContent. Se si desidera salvare un file di testo, è possibile utilizzare un StringContent e così via.

Le altre informazioni che necessarie per passare al servizio sono l'ID della cartella in cui il file verrà salvato. Nel semplice esempio illustrato Figura 11, il parentId viene passato al metodo di caricamento. Si noti che l'operazione PUT restituisce contenuto contenente informazioni sul nuovo del file in OneDrive, un formato JSON, ad esempio il relativo ID, l'URL Web e URL di download e così via.

Figura 11 sta caricando un File del contenuto

var content = new StreamContent(stream);
var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
  new AuthenticationHeaderValue("Bearer", AccessToken);
var uri = new Uri(
  "https://api.onedrive.com/v1.0"
  + string.Format(
    "/drive/items/{0}:/{1}:/content",
    parentId,
    fileName));
var response = await client.PutAsync(uri, content);
var json = await response.Content.ReadAsStringAsync();
var result = JsonConvert.DeserializeObject<ItemInfoResponse>(json);
return result;

Oltre il semplice caricamento descritto in questo caso, l'API di OneDrive offre inoltre multiparte e può essere ripristinato vengono caricati con una sintassi diversa. Il caricamento semplice è accettabile per i file di dimensioni inferiori a 100MB. Se il file è superiore, è necessario consultare la documentazione in bit.ly/1PB31Cn.

Recupero di un collegamento univoco

L'ultima operazione che verrà illustrata di seguito viene illustrato come ottenere un collegamento univoco "share" per un elemento. Questa operazione è utile inviare un collegamento univoco a un amico tramite posta elettronica, SMS, i social media e così via. Figura 12 viene illustrato come ottenere queste informazioni, in base all'ID. dell'elemento Nell'esempio, è possibile ottenere un collegamento al file appena caricato nella dimostrazione precedente.

Figura 12 recupero di un collegamento di condivisione

public async Task<LinkResponseInfo> GetLink(
  LinkKind kind,
  string fileId)
{
  // LinkKind id View or Edit
  var client = new HttpClient();
  client.DefaultRequestHeaders.Authorization =
    new AuthenticationHeaderValue("Bearer", AccessToken);
  var request = string.Format("/drive/items/{0}/action.createLink", fileId);
  var uri = new Uri(
    "https://api.onedrive.com/v1.0"
    + request);
  var requestJson = JsonConvert.SerializeObject(
    new RequestLinkInfo
    {
      Type = kind.ToString().ToLower()
    });
  var content = new StringContent(
    requestJson,
    Encoding.UTF8,
    "application/json");
  var response = await client.PostAsync(uri, content);
  var result = JsonConvert.DeserializeObject<LinkResponseInfo>(
    await response.Content.ReadAsStringAsync());
  return result;
}

In base alla documentazione, la richiesta è leggermente diversa da GET richieste che è stato inserito in precedenza, perché il servizio richiede informazioni più dettagliate. La richiesta "condivisione link" è il seguente: REGISTRARE /drive/items/{item-id}/action.createLink. Le informazioni che è necessario registrare il servizio sono un frammento di codice JSON con il tipo di collegamento: "Visualizza" o "Modifica", ad esempio: {"type": "visualizzazione"}

Avvolgendo

Esistono alcune operazioni aggiuntive non descritta in questo articolo, ad esempio l'eliminazione di un file, l'aggiornamento del contenuto del file e la sincronizzazione delle modifiche. In generale, tuttavia, le operazioni tutti seguono lo stesso modello e possono essere eseguite utilizzando HttpClient, i metodi HTTP e JSON. Grazie a miglioramenti nella programmazione asincrona in Microsoft .NET Framework, tali operazioni sono estremamente fluida e facile da implementare in qualsiasi framework supportati, tra cui Windows 10, ma anche di WPF, Windows Phone, xamarin. IOS, xamarin. Android e così via. Con questo tipo facilità d'uso, non è realmente non abbia un tipo di interazione cloud nelle App UWP, ad esempio backup contenuto o per eseguire il roaming delle impostazioni. Nel prossimo articolo, si noterà come la PCL appena rilasciata dal team di OneDrive consente di semplificare ulteriormente questa integrazione.


Laurent Bugnionè senior director per IdentityMine, una delle aziende leader (e un gold partner) per le tecnologie Microsoft. Egli si basa Zurigo in Svizzera. Il suo libro 2010, "Silverlight 4 Unleashed," pubblicato da SAM, è un seguito avanzata per "Silverlight 2 Unleashed" (2008). Ha scritto più pubblicazioni, è nel suo nono anno come MVP di Microsoft ed è nel suo secondo anno, come un Microsoft Regional Director. È l'autore dell'open source noti framework MVVM Light per Windows, WPF, Xamarin e del corso riferimento Pluralsight popolare su MVVM Light. È possibile contattarlo sul suo blog all'indirizzo galasoft.ch.

Grazie ai seguenti esperti tecnici per la revisione di questo articolo: Corrado Cavalli (Gaia) e Ryan Gregg (Microsoft)