Práticas recomendadas para trabalhar com a API do Excel

Este artigo fornece recomendações para trabalhar com as APIs do Excel no Microsoft Graph.

Gerenciar sessões da maneira mais eficiente

Se você tiver mais de uma chamada a fazer em um determinado período de tempo, recomendamos que você crie uma sessão e passe o ID da sessão com cada solicitação. Para representar a sessão na API, use o cabeçalho workbook-session-id: {session-id}. Ao fazer isso, você pode usar as APIs do Excel da maneira mais eficiente.

O exemplo a seguir mostra como adicionar um novo número a uma tabela e localizar um registro em uma pasta de trabalho usando essa abordagem.

Etapa 1: criar uma sessão

Solicitação

POST https://graph.microsoft.com/v1.0/me/drive/items/{id}/workbook/createSession
Content-type: application/json

{
  "persistChanges": true
}

Resposta

Veja a seguir uma resposta bem-sucedida.

HTTP/1.1 201 Created
Content-type: application/json

{
  "id": "id-value",
  "persistChanges": true
}

Etapa 2: Adicionar uma nova linha à tabela

Solicitação

POST https://graph.microsoft.com/v1.0/me/drive/items/{id}/workbook/tables/{id|name}/rows/add
Content-type: application/json
workbook-session-id: {session-id}

{
  "values": [[“east”, “pear”, 4]]
}

Resposta

HTTP/1.1 200 OK
Content-type: application/json

{
  "index": 6,
  "values": [[“east”, “pear”, 4]]
}

Etapa 3: Pesquisar um valor na tabela atualizada

Solicitação

POST https://graph.microsoft.com/v1.0/me/drive/items/{id}/workbook/functions/vlookup
Content-type: application/json
workbook-session-id: {session-id}

{
    "lookupValue":"pear",
    "tableArray":{"Address":"Sheet1!B2:C7"},
    "colIndexNum":2,
    "rangeLookup":false
}

Resposta

HTTP code: 200 OK
content-type: application/json

{
    "value": 5
}

Etapa 4: Feche a sessão depois que todas as solicitações forem concluídas

Solicitação

POST https://graph.microsoft.com/v1.0/me/drive/items/{id}/workbook/closeSession
Content-type: application/json
workbook-session-id: {session-id}

{
}

Resposta

HTTP/1.1 204 No Content

Para obter mais informações, consulte Criar sessão e Fechar sessão.

Trabalhar com APIs que demoram muito para serem concluídas

Você pode notar que algumas operações levam um tempo indeterminado para serem concluídas; por exemplo, abrir uma pasta de trabalho grande. É fácil atingir o tempo limite enquanto aguarda a resposta a essas solicitações. Para resolver esse problema, fornecemos o padrão de operação de longa execução. Ao usar esse padrão, você não precisa se preocupar com o tempo limite da solicitação.

Atualmente, a API do Excel de criação de sessão no Microsoft Graph tem o padrão de operação de execução prolongada habilitado. Esse padrão envolve as seguintes etapas:

  1. Adicione um Prefer: respond-async cabeçalho à solicitação para indicar que é uma operação de execução prolongada quando você cria uma sessão.
  2. Uma operação de execução prolongada retorna uma 202 Accepted resposta junto com um cabeçalho Location para recuperar o status da operação. Se a criação da sessão for concluída em vários segundos, ela retornará uma resposta de criação de sessão regular em vez de usar o padrão de operação de execução longa.
  3. Com a 202 Accepted resposta, você pode recuperar o status da operação no local especificado. Os valores de status da operação incluem notStarted, running, succeedede failed.
  4. Após a conclusão da operação, você poderá obter o resultado da criação da sessão por meio da URL especificada na resposta bem-sucedida.

O exemplo a seguir cria uma sessão usando o padrão de operação de execução prolongada.

Solicitação inicial para criar sessão

Solicitação

POST https://graph.microsoft.com/v1.0/me/drive/items/{drive-item-id}/workbook/createSession
Prefer: respond-async
Content-type: application/json
{
    "persistChanges": true
}

Resposta

O padrão de operação de execução prolongada retorna uma 202 Accepted resposta semelhante à seguinte.

HTTP/1.1 202 Accepted
Location: https://graph.microsoft.com/v1.0/me/drive/items/{drive-item-id}/workbook/operations/{operation-id}
Content-type: application/json

{
}

Em alguns casos, se a criação for bem-sucedida em segundos, ela não entrará no padrão de operação de execução prolongada; Em vez disso, ele retorna como uma sessão de criação normal e a solicitação bem-sucedida retornará uma 201 Created resposta.

HTTP/1.1 201 Created
Content-type: application/json

{
  "id": "id-value",
  "persistChanges": true
}

O exemplo a seguir mostra a resposta quando a solicitação falha.

Observação: o objeto de resposta mostrado aqui pode ser encurtado para legibilidade.

HTTP/1.1 500 Internal Server Error
Content-type: application/json

{
  "error":{
    "code": "internalServerError",
    "message": "An internal server error occurred while processing the request.",
    "innerError": {
      "code": "internalServerErrorUncategorized",
      "message": "An unspecified error has occurred.",
      "innerError": {
        "code": "GenericFileOpenError",
        "message": "The workbook cannot be opened."
      }
    }
  }
}

Sonde o status da sessão de criação de longa duração

Com o padrão de operação de execução prolongada, você pode obter o status de criação no local especificado usando a solicitação a seguir. O intervalo sugerido para a sondagem do status é de cerca de 30 segundos. O intervalo máximo não deve ser maior que 4 minutos.

Solicitação

GET https://graph.microsoft.com/v1.0/me/drive/items/{drive-item-id}/workbook/operations/{operation-id}
{
}

Resposta

A seguir está a resposta quando a operação tem um status de running.

HTTP/1.1 200 OK
Content-type: application/json

{
    "id": {operation-id},
    "status": "running"
}

A seguir está a resposta quando o status da operação é succeeded.

HTTP/1.1 200 OK
Content-type: application/json

{
    "id": {operation-id},
    "status": "succeeded",
    "resourceLocation": "https://graph.microsoft.com/v1.0/me/drive/items/{drive-item-id}/workbook/sessionInfoResource(key='{key}')
}

A seguir está a resposta quando o status da operação é failed.

HTTP/1.1 200 OK
Content-type: application/json

{
  "id": {operation-id},
  "status": "failed",
  "error":{
    "code": "internalServerError",
    "message": "An internal server error occurred while processing the request.",
    "innerError": {
      "code": ""internalServerErrorUncategorized",
      "message": "An unspecified error has occurred.",
      "innerError": {
        "code": "GenericFileOpenError",
        "message": "The workbook cannot be opened."
      }
    }
  }
}

Para obter mais informações sobre erros, consulte Códigos de erro e mensagens.

Adquirir informações da sessão

Solicitação

Com um status de , você pode obter as informações da sessão criada por meio de succeededresourceLocation uma solicitação semelhante à seguinte.

GET https://graph.microsoft.com/v1.0/me/drive/items/{drive-item-id}/workbook/sessionInfoResource(key='{key}')
{
}

Resposta

Esta é a resposta.

HTTP/1.1 200 OK
Content-type: application/json

{
    "id": "id-value",
    "persistChanges": true
}

Observação

As informações de aquisição de sessão dependem da solicitação inicial. Você não precisará adquirir o resultado se a solicitação inicial não retornar um corpo de resposta.

Reduzir erros de limitação

As APIs do Excel no Microsoft Graph afetam o uso de recursos de vários serviços de dependência. O impacto pode variar entre diferentes solicitações: por exemplo, você pode esperar que a atualização de uma cadeia de caracteres curta em uma única célula de uma pasta de trabalho pequena consuma menos recursos do que adicionar uma tabela grande com fórmulas complexas a uma pasta de trabalho grande.

Mesmo com a mesma API, parâmetros e pastas de trabalho de destino podem introduzir diferenças significativas. Portanto, a limitação da API do Excel não é definida com números limite simples e universais, pois eles resultariam em limites mais restritivos. As práticas recomendadas a seguir ajudarão você a concluir tarefas mais rapidamente com menos erros de limitação.

Retry-After cabeçalho

Em muitos casos, uma resposta de limitação inclui um Retry-After cabeçalho. Respeitar o valor do cabeçalho e atrasar solicitações semelhantes ajudaria o cliente a se recuperar da limitação. Para obter detalhes sobre como lidar com respostas de erro de APIs do Excel no Microsoft Graph, consulte Tratamento de erros para APIs do Excel no Microsoft Graph.

Limitação e simultaneidade

Outro fator relacionado à limitação é a simultaneidade de solicitações. Não recomendamos aumentar a simultaneidade ao usar APIs do Excel (por exemplo, paralelizar as solicitações para a mesma pasta de trabalho), especialmente para solicitações de gravação. Em vez disso, a menos que haja uma preocupação específica, como sobrecarga significativa de rede em comparação com o tempo de execução da solicitação muito curto, recomendamos o uso sequencial no caso mais comum: para cada pasta de trabalho, envie a próxima solicitação somente depois de receber uma resposta bem-sucedida à solicitação atual.

Solicitações de gravação simultâneas para a mesma pasta de trabalho geralmente não são executadas em paralelo (embora em alguns casos sejam); Em vez disso, elas geralmente são a causa de limitação, tempo limite (quando as solicitações são enfileiradas em servidores), conflito de merge (quando sessões simultâneas estão envolvidas) e outros tipos de falhas. Eles também complicam o tratamento de erros; Por exemplo, quando você recebe uma resposta de falha, não há como confirmar o status de outras solicitações pendentes, o que dificulta a determinação ou a recuperação do estado da pasta de trabalho.