Como usar a Graph API

A Graph API é a principal forma de incluir e excluir dados do gráfico social do Facebook. É uma API baseada em HTTP de nível inferior usada para consultar dados, publicar novas histórias, carregar fotos e diversas outras tarefas que um aplicativo pode precisar realizar. Este guia explica como conseguir tudo isso com a Graph API.

Noções básicas

Cobrimos as noções básicas de terminologia e estrutura da Graph API em nossa visão geral da Graph API. As seções a seguir explicam mais sobre as diferentes operações que podem ser executadas usando a API.

Leitura

Todos os nós e as bordas na Graph API podem ser lidos com uma solicitação HTTP GET para o endpoint relevante. Por exemplo, se você quiser recuperar informações sobre o usuário atual, faça uma solicitação HTTP GET da seguinte maneira:

GET /v2.5/me HTTP/1.1
Host: graph.facebook.com

A maioria das chamadas de API devem ser assinadas com um token de acesso. Você pode determinar quais permissões são necessárias neste token de acesso analisando a referência da Graph API em busca do nó ou da borda que você deseja ler. Também é possível usar o Explorador da Graph API para gerar tokens rapidamente e experimentar um pouco a API para descobrir como ela funciona.

O nó /me é um ponto de extremidade especial que traduz para o user_id da pessoa (ou a page_id da Página do Facebook) cujo token de acesso está sendo usado para fazer chamadas à API. Se você tivesse o token de acesso de um usuário, poderia recuperar todas as fotos dele usando:

GET graph.facebook.com
  /me/photos

A resposta recebida varia de acordo com o nó ou a borda que você estiver lendo, mas as respostas terão a seguinte forma geral:

{
   "fieldname": {field-value},
   ....
}

Como escolher os campos

Por padrão, nem todos os campos em um nó ou uma borda retornam quando você faz uma consulta. Você pode escolher os campos ou bordas que deseja retornar com o parâmetro de consulta fields. Isso é muito útil para agilizar suas chamadas de API e torná-las mais eficientes.

Por exemplo, a seguinte chamada da Graph API usando seu próprio token de acesso https://graph.facebook.com/me?fields=id,name,picture retornará apenas a ID, o nome e a foto do seu perfil:

GET graph.facebook.com/me?fields=id,name,picture

Como colocar em ordem

Você pode ordenar certos conjuntos de dados cronologicamente. Por exemplo, você pode classificar os comentários de uma foto em ordem cronológica inversa usando a chave reverse_chronological:

GET graph.facebook.com
  /{photo-id}?
    fields=comments.order(reverse_chronological)

order deve ser um dos valores a seguir:

  • chronological
  • reverse_chronological

Pesquisa de URL

A maioria dos objetos pode ser descoberta com seus IDs, mas às vezes isso não é possível, e tudo o que você tem é uma URL para identificar algo.

Você pode usar o nó da URL introduzido na v2.1 para retornar os IDs das URLs do Objeto do Open Graph ou para encontrar dados associados a uma URL do App Link.

Saiba mais sobre como encontrar os dados do App Link com a API de Índice em nossa documentação para App Links.

Como modificar solicitações de API

Alguns endpoints de API podem ser usados com parâmetros extras que modificarão a solicitação. A natureza das ações desses "modificadores" varia, por isso documentamos cada um deles separadamente em cada um dos documentos de referência da API, quando era apropriado. Veja abaixo uma lista de modificadores comuns que podem ser usados com a maioria dos endpoints.

Nome Descrição Tipo

return_ssl_resources

Usado quando você precisa retornar uma imagem por uma conexão segura (HTTPS) a fim de evitar avisos de conteúdo misto nos navegadores.

bool

locale

Usado se o seu aplicativo precisar recuperar o conteúdo localizado no idioma de uma localidade específica (quando estiver disponível).

Locale

Outros modificadores para paginação e introspecção são exibidos abaixo.

Como fazer solicitações aninhadas

O recurso de expansão de campo da Graph API permite que você aninhe de forma efetiva várias consultas de gráfico em uma única chamada. Certos recursos, incluindo a maioria das APIs de Anúncio, não são capazes de usar a expansão de campo em algumas ou todas as conexões.

Por exemplo, em uma única chamada, você pode pedir as primeiras N fotos dos primeiros K álbuns. A resposta mantém a hierarquia dos dados, assim os desenvolvedores não precisam juntar os dados no cliente.

Isso é diferente do recurso Solicitações em lote que permite a você fazer várias chamadas à Graph API, possivelmente não relacionadas, em uma única solicitação.

Este é o formato geral assumido pela expansão de campo:

GET graph.facebook.com
  /{node-id}?
    fields=<first-level>{<second-level>}

<first-level> neste caso seria um ou mais campos (separados por vírgulas) ou bordas do nó pai. <second-level> seria um ou mais campos (separados por vírgulas) ou bordas do nó do primeiro nível.

Não há limites para a quantidade de aninhamento de níveis que pode ocorrer aqui. Você também pode usar um argumento .limit(n) em cada campo ou borda para restringir quantos objetos deseja obter.

Isso é mais fácil de entender na prática, portanto veja um exemplo de consulta que recuperará até cinco álbuns criados por alguém, e as últimas cinco publicações no feed.

GET graph.facebook.com
  /me?
    fields=albums.limit(5),posts.limit(5)

Podemos estender isso um pouco mais e, para cada objeto de álbum, recuperar também as duas primeiras fotos e as pessoas marcadas em cada foto:

GET graph.facebook.com
  /me?
    fields=albums.limit(5){name, photos.limit(2)},posts.limit(5)

Agora podemos estendê-la novamente recuperando o nome de cada foto, a URL da imagem e as pessoas marcadas:

GET graph.facebook.com
  /me?
    fields=albums.limit(5){name, photos.limit(2){name, picture, tags.limit(2)}},posts.limit(5)

Vamos ver um exemplo usando uma paginação com base em cursor.

GET graph.facebook.com
  /me?fields=albums.limit(5){name,photos.limit(2).after(MTAyMTE1OTQwNDc2MDAxNDkZD){name,picture,tags.limit(2)}},posts.limit(5)

Veja como a expansão de campo pode trabalhar entre os nós, as bordas e os campos para retornar dados realmente complexos em uma única solicitação.

Como percorrer os resultados paginados

Quando você faz uma solicitação à API para um nó ou uma borda, normalmente não recebe todos os resultados dessa solicitação em uma única resposta. Isso ocorre por que algumas respostas podem conter milhares de objetos. Portanto, a maioria das respostas é paginada por padrão.

Paginação com base no cursor

A paginação com base no cursor é a forma mais eficiente de paginação e deve, sempre que possível, ser usada. Um cursor se refere a uma cadeia de caracteres aleatória que marca um item específico em uma lista de dados. A menos que esse item seja excluído, o cursor sempre apontará para a mesma parte da lista, mas será invalidado caso um item seja removido. Portanto, seu aplicativo não deve armazenar cursores ou supor que eles ainda sejam válidos no futuro.

Ao ler uma borda que oferece suporte à paginação de cursor, você verá a seguinte resposta JSON:

{
  "data": [
     ... Endpoint data is here
  ],
  "paging": {
    "cursors": {
      "after": "MTAxNTExOTQ1MjAwNzI5NDE=",
      "before": "NDMyNzQyODI3OTQw"
    },
    "previous": "https://graph.facebook.com/me/albums?limit=25&before=NDMyNzQyODI3OTQw"
    "next": "https://graph.facebook.com/me/albums?limit=25&after=MTAxNTExOTQ1MjAwNzI5NDE="
  }
}

Uma borda paginada com cursor oferece suporte aos seguintes parâmetros:

  • before: esse é o cursor que aponta para o início da página de dados retornados.
  • after: esse é o cursor que aponta para o final da página de dados retornados.
  • limit: esse é o número máximo de objetos que podem ser retornados. Uma consulta pode retornar menos que o valor do limit devido à filtragem. Não dependa do número de resultados menor que o valor limit para indicar que sua consulta alcançou o final da lista de dados. Em vez disso, use a ausência de next como descrito abaixo. Por exemplo, se você definir o limit para dez, e retornarem nove resultados, pode haver mais dados disponíveis, mas um item foi removido devido à filtragem de privacidade. Algumas bordas também podem ter um máximo para o valor limit, por questões de desempenho. Em todos os casos, a API retornará os links de paginação corretos.
  • next: o endpoint da Graph API que retornará a próxima página de dados. Se não estiver incluído, esta será a última página de dados. Devido ao modo como a paginação funciona com visibilidade e privacidade, é possível que uma página esteja vazia, mas contenha um link de página "avançar". Interrompa a paginação quando o link "avançar" não aparecer mais.
  • previous: o endpoint da Graph API que retornará a página de dados anterior. Se não estiver incluído, esta será a primeira página de dados.

Não armazene cursores. Os cursores podem se tornar inválidos rapidamente se os itens forem adicionados ou excluídos.

Paginação com base no tempo

A paginação de tempo é usada para navegar pelos dados dos resultados usando carimbos de data e hora Unix, que apontam para horários específicos em uma lista de dados.

Ao usar um endpoint que usa a paginação com base no tempo, você verá a seguinte resposta JSON:

{
  "data": [
     ... Endpoint data is here
  ],
  "paging": {
    "previous": "https://graph.facebook.com/me/feed?limit=25&since=1364849754",
    "next": "https://graph.facebook.com/me/feed?limit=25&until=1364587774"
  }
}

Uma borda paginada por tempo oferece suporte aos seguintes parâmetros:

  • until: um carimbo de data e hora Unix ou um valor de dados strtotime que aponta para o final do intervalo de dados baseados no tempo.
  • since: um carimbo de data e hora Unix ou um valor de dados strtotime que aponta para o início do intervalo de dados baseados no tempo.
  • limit: esse é o número máximo de objetos que podem ser retornados. Uma consulta pode retornar menos que o valor do limit devido à filtragem. Não dependa do número de resultados menor que o valor limit para indicar que sua consulta alcançou o final da lista de dados. Em vez disso, use a ausência de next como descrito abaixo. Por exemplo, se você definir o limit para dez, e retornarem nove resultados, pode haver mais dados disponíveis, mas um item foi removido devido à filtragem de privacidade. Algumas bordas também podem ter um máximo para o valor limit, por questões de desempenho. Em todos os casos, a API retornará os links de paginação corretos.
  • next: o endpoint da Graph API que retornará a próxima página de dados.
  • previous: o endpoint da Graph API que retornará a página de dados anterior.

Para resultados consistentes, especifique os parâmetros since e until. Além disso, é recomendável que o intervalo de tempo seja de no máximo seis meses.

Paginação com base em deslocamento

A paginação por deslocamento pode ser usada quando você não se importa com a cronologia e quer retornar apenas uma quantidade específica de objetos. Isso deve ser usado apenas se a borda não suportar a paginação com base em cursor ou no tempo.

Uma borda com paginação por deslocamento oferece suporte aos seguintes parâmetros:

  • offset: desloca o início de cada página de acordo com o número especificado.
  • limit: esse é o número máximo de objetos que podem ser retornados. Uma consulta pode retornar menos que o valor do limit devido à filtragem. Não dependa do número de resultados menor que o valor limit para indicar que sua consulta alcançou o final da lista de dados. Em vez disso, use a ausência de next como descrito abaixo. Por exemplo, se você definir o limit para dez, e retornarem nove resultados, pode haver mais dados disponíveis, mas um item foi removido devido à filtragem de privacidade. Algumas bordas também podem ter um máximo para o valor limit, por questões de desempenho. Em todos os casos, a API retornará os links de paginação corretos.
  • next: o endpoint da Graph API que retornará a próxima página de dados. Se não estiver incluído, esta será a última página de dados. Devido ao modo como a paginação funciona com visibilidade e privacidade, é possível que uma página esteja vazia, mas contenha um link de página "avançar". Interrompa a paginação quando o link "avançar" não aparecer mais.
  • previous: o endpoint da Graph API que retornará a página de dados anterior. Se não estiver incluído, esta será a primeira página de dados.

Observe que se novos objetos forem adicionados à lista de itens paginados, o conteúdo de cada página baseada em deslocamento mudará.

A paginação com base em deslocamento não tem suporte para todas as chamadas de API. Para obter resultados consistentes, recomendamos a paginação usando os links voltar/avançar que retornamos na resposta.

Como fazer solicitações de grande porte

Alguns endpoints da Graph API podem receber parâmetros muito grandes. Se as suas solicitações forem maiores do que alguns milhares de caracteres, talvez você comece a ver erros de servidor, já que nossos servidores rejeitarão solicitações GET muito grandes.

Uma das melhores práticas para as solicitações de grande porte é usar uma solicitação POST em vez de uma solicitação GET e adicionar um parâmetro method=GET. Se você fizer isso, POST será interpretada como se fosse GET.

Como fazer várias solicitações

A versão padrão da Graph API foi projetada para facilitar a obtenção dos dados para um objeto individual e a procura por conexões entre os objetos. Ela também inclui uma habilidade limitada de recuperar dados para alguns objetos ao mesmo tempo.

Se o seu aplicativo precisar da habilidade de acessar quantidades consideráveis de dados de uma só vez, ou se você precisar fazer alterações em vários objetos ao mesmo tempo, normalmente é mais eficiente colocar suas consultas em lotes do que fazer várias consultas HTTP individuais.

Para permitir isso, a Graph API oferece suporte a várias funções, incluindo pesquisa de múltiplos IDs e uso de lotes. As solicitações em lote estão explicadas em um guia separado, mas você pode ler mais sobre a pesquisa de múltiplos IDs logo abaixo.

Solicitações de leitura de múltiplos IDs

Você pode fazer uma única solicitação GET que recuperará vários nós usando o ponto de extremidade ?ids com os IDs de objeto desses nós. Por exemplo, para pesquisar a página de Desenvolvedores do Facebook e o usuário da sessão atual em uma única solicitação, você pode usar a seguinte chamada da Graph API:

GET graph.facebook.com
  /?ids=platform,me

É equivalente às seguintes solicitações individuais de API:

GET graph.facebook.com
  /platform
  
GET graph.facebook.com
  /me

Os dados retornados terão uma aparência semelhante a seguinte:

{
  "me": {
    "id": "1234567890"
    ... // Other fields
  }, 
  "platform": {
    "id": "19292868552"
    ... // Other fields
  }
}

Isso também pode funcionar com bordas, contanto que todos os IDs solicitados tenham a borda solicitada. Por exemplo:

GET graph.facebook.com
  /photos?ids={user-id-a},{user-id-b}

É equivalente às seguintes solicitações individuais de API:

GET graph.facebook.com
  /{user-id-a}/photos
  
GET graph.facebook.com
  /{user-id-b}/photos

Os dados retornados terão uma aparência semelhante a seguinte:

{
  "{user-id-a}": {
    "data": [
      {
        "id": "12345", 
        "picture": "{photo-url}", 
        "created_time": "2014-07-15T15:11:25+0000"
      }
      ... // More photos
    ]
  },
  "{user-id-b}": {
    "data": [
      {
        "id": "56789", 
        "picture": "{photo-url}", 
        "created_time": "2014-01-15T12:24:47+0000"
      }
      ... // More photos
    ]
  }, 
}

Observe que enquanto a filtragem de campos, expansão de campo e limitação funcionarem com essas pesquisas de múltiplos IDs, você receberá uma mensagem de erro se um dos objetos não tiver nenhum dos campos solicitados. Por exemplo, se você tiver que pesquisar uma Página e um Usuário utilizando este método e, em seguida, filtrar em fields=id,picture,gender, a solicitação falhará, pois as Páginas não têm um campo gender.

Introspecção

A Graph API suporta a introspecção dos nós. Isso permite a você ver todas as bordas de um nó sem conhecer previamente seu tipo. Para obter essas informações, adicione metadata=1 à solicitação da Graph API:

GET graph.facebook.com
  /{node-id}?
    metadata=1

O JSON resultante incluirá uma propriedade metadata que lista todas as bordas suportadas para o determinado nó:

{
   "name": {node-name},
   "metadata": {
      "connections": {
         "feed": "http://graph.facebook.com/me/feed",
         "picture": "https://graph.facebook.com/me/picture",
         ....
      }
      "fields": [
        {
          "name": "id",
          "description": "The user's Facebook ID. No `access_token` required. `string`."
        },
        ....
      ],
      "type": "user"
   }
}

Publicação

A maioria dos nós na Graph API tem bordas que podem ser destinos de publicação, por exemplo, /{user-id}/feed ou /{album-id}/photos. Toda publicação da Graph API é realizada com uma solicitação HTTP POST para a borda relevante com quaisquer parâmetros necessários incluídos. Por exemplo, para publicar em nome de alguém, você faria uma solicitação HTTP POST da seguinte maneira:

POST graph.facebook.com
  /{user-id}/feed?
    message={message}&
    access_token={access-token}

Todas as chamadas de publicação devem ser assinadas com um token de acesso. Você pode determinar quais permissões são necessárias neste token de acesso analisando a referência da Graph API em busca do nó no qual você quer publicar.

Há um grande número de bordas que podem ser destinos de publicação. É possível encontrar detalhes no documento de referência de cada nó.

O guia Cenários comuns da Graph API contém informações adicionais para alguns cenários de publicação comuns.

Como fazer várias solicitações

Você pode encadear chamadas de publicação com chamadas de leitura usando as Solicitações em lote. Para informações adicionais, consulte Como fazer várias solicitações de API.

Read-After-Write

Muitas bordas suportam read-after-write. Consulte a documentação de referência de cada ponto de extremidade para ver se ele suporta read-after-write e quais campos estão disponíveis.

Atualização

Toda atualização da Graph API é realizada com uma solicitação HTTP POST para o nó relevante com quaisquer parâmetros necessários incluídos:

POST graph.facebook.com
  /{node-id}?
    {updated-field}={new-value}&
    access_token={access-token}

Todas as chamadas de atualização devem ser assinadas com um token de acesso com as mesmas permissões necessárias para publicação nesse endpoint, de acordo com a referência da Graph API do nó que você deseja atualizar.

Read-After-Write

Muitas bordas suportam read-after-write. Consulte a documentação de referência de cada ponto de extremidade para ver se ele suporta read-after-write e quais campos estão disponíveis.

Exclusão

Exclua os nós do gráfico enviando solicitações HTTP DELETE para eles:

DELETE graph.facebook.com
  /{node-id}?
    access_token=...

De modo geral, um aplicativo só pode excluir conteúdo criado por ele mesmo. Confira o guia de referência do nó ou da borda para obter mais informações.

Para oferecer suporte aos clientes que não têm suporte para todos os métodos HTTP, emita como alternativa uma solicitação POST para um ponto de extremidade com o argumento adicional method=delete para substituir o método HTTP. Por exemplo, você pode excluir um comentário emitindo a seguinte solicitação:

POST graph.facebook.com
  /{comment-id}?
    method=delete

Read-After-Write

Para criar e atualizar pontos de extremidade, a Graph API pode ler imediatamente um objeto publicado ou atualizado com sucesso e retornar campos suportados pelo ponto de extremidade de leitura correspondente.

Para usar esse recurso, inclua um parâmetro fields na sua solicitação e liste os campos que você deseja retornar. Por exemplo, para publicar a mensagem “Olá” no feed de um usuário, você pode fazer a seguinte solicitação:

POST graph.facebook.com
  /126577551217199/feed?
    message=Hello&
    fields=created_time,from,id,message,permalink_url

Isso retornaria os campos especificados como uma resposta no formato JSON, como esta:

{
  "created_time": "2017-04-06T22:04:21+0000",
  "from": {
    "name": "Jay P Jeanne",
    "id": "126577551217199"
  },
  "id": "126577551217199_122842541590700",
  "message": "Hello",
  "permalink_url": "https://www.facebook.com/126577551217199/posts/122842541590700",
}

Consulte a documentação de referência de cada ponto de extremidade para ver se ele suporta read-after-write e quais campos estão disponíveis.

Erros

Se a leitura falhar por qualquer motivo (por exemplo, solicitação de um campo não existente), a Graph API responderá com uma resposta de erro padrão. Além disso, a resposta incluirá uma propriedade original_response cujo valor será o que o ponto de extremidade normalmente retorna em caso de sucesso.

Por exemplo, esta solicitação contém um campo inválido:

POST graph.facebook.com
  /126577551217199/feed?
    message=Hello&
    fields=permalink_urls

Esta seria a resposta:

{
  "error": {
    "message": "(#100) Tried accessing nonexisting field (permalink_urls) on node type (Post)",
    "type": "FacebookApiException",
    "code": 100,
    "fbtrace_id": "AzMnKh6NRKY",
    "original_response": {
      "id": "126577551217199_122842541590700"
    }
  }
}

Você pode pesquisar muitos objetos públicos no gráfico social com o endpoint /search. A sintaxe para a pesquisa é:

GET graph.facebook.com
  /search?
    q={your-query}&
    type={object-type}

Todas as consultas de pesquisa da Graph API exigem um token de acesso incluído na solicitação. Você precisa de um token de acesso de usuário para realizar uma pesquisa.

Tipos de pesquisa disponíveis

Oferecemos suporte à pesquisa para os seguintes tipos:

Tipo Descrição Valor de `q`

user

Pesquise uma pessoa (caso ela permita a pesquisa do nome dela).

Nome

page

Pesquise uma Página.

Nome

event

Pesquise um evento.

Nome

group

Pesquise um Grupo.

Nome

place

Pesquise um local. Você pode restringir sua pesquisa para um local e uma distância específicos adicionando o parâmetro center (com latitude e longitude) e um parâmetro distance opcional (em metros):

Nome

placetopic

Retorna uma lista de possíveis tópicos de Página de locais e seus IDs. Use com o parâmetro topic_filter=all para obter a lista completa.

Nenhuma

ad_*

Um conjunto de opções diferentes de pesquisa que podem ser usadas para encontrar opções de direcionamento.

Consulte Opções de direcionamento

Exemplo:

GET graph.facebook.com
  /search?
    q=coffee&
    type=place&
    center=37.76,-122.427&
    distance=1000

Como lidar com erros

As solicitações feitas às nossas APIs podem resultar em uma série de diferentes repostas de erro. O tópico a seguir descreve as táticas de recuperação e fornece uma lista de valores de erro com um mapa para a tática de recuperação mais comum a ser usada.

Recebimento de códigos de erro

Veja a seguir uma resposta de erro comum resultante de uma solicitação de API mal-sucedida:

{
  "error": {
    "message": "Message describing the error", 
    "type": "OAuthException", 
    "code": 190,
    "error_subcode": 460,
    "error_user_title": "A title",
    "error_user_msg": "A message",
    "fbtrace_id": "EJplcsCHuLu"
  }
}
  • message: Uma descrição do erro compreensível aos seres humanos.
  • code: Um código de erro. Os valores comuns estão listados abaixo, juntamente com táticas comuns de recuperação.
  • error_subcode: Informações adicionais sobre o erro. Os valores comuns estão listados abaixo.
  • error_user_msg: A mensagem que será mostrada ao usuário. O idioma da mensagem é baseado no local da solicitação da API.
  • error_user_title: O título do diálogo, se exibido. O idioma da mensagem é baseado no local da solicitação da API.
  • fbtrace_id: Identificador de suporte interno. Ao denunciar um erro relacionado a uma chamada à Graph API, inclua o fbtrace_id para nos ajudar a encontrar os dados de log para depuração.

Códigos de erro

Código ou Tipo Nome O que fazer

OAuthException

Se não houver um subcódigo presente, isso significa que o status de login ou o token de acesso expirou, foi revogado ou é inválido. Obtenha um novo token de acesso.

Se houver um subcódigo, consulte-o.

102

Sessão da API

Se não houver um subcódigo presente, isso significa que o status de login ou o token de acesso expirou, foi revogado ou é inválido. Obtenha um novo token de acesso.

Se houver um subcódigo, consulte-o.

1

API desconhecida

Possivelmente, um problema temporário devido ao tempo de inatividade. Aguarde um pouco e tente novamente a operação. Se isso ocorrer novamente, verifique se você está solicitando uma API existente.

2

Serviço de API

Um problema temporário devido ao tempo de inatividade. Aguarde um pouco e tente novamente a operação.

4

Muitas chamadas de API

Um problema temporário devido à limitação. Aguarde um pouco e tente novamente a operação, ou examine o volume da solicitação de API.

17

Muitas chamadas de usuário de API

Um problema temporário devido à limitação. Aguarde um pouco e tente novamente a operação, ou examine o volume da solicitação de API.

10

Permissão de API negada

A permissão não foi concedida ou foi removida. Lide com as permissões ausentes.

190

O token de acesso expirou

Obtenha um novo token de acesso.

200-299

Permissão da API (Múltiplos valores dependendo da permissão)

A permissão não foi concedida ou foi removida. Lide com as permissões ausentes.

341

Limite do aplicativo atingido

Um problema temporário devido ao tempo de inatividade ou à limitação. Aguarde um pouco e tente novamente a operação, ou examine o volume da solicitação de API.

368

Bloqueado temporariamente por violações de políticas

Aguarde um pouco e tente novamente a operação.

506

Publicação duplicada

Publicações duplicadas não podem ser publicadas consecutivamente. Altere o conteúdo da publicação e tente novamente.

1609005

Erro ao publicar o link

Houve um problema ao detalhar os dados do link fornecido. Verifique o URL e tente novamente.

Subcódigos de erro de autenticação

Código Nome O que fazer

458

Aplicativo não instalado

O usuário não fez login no seu aplicativo. Autentique novamente o usuário.

459

Usuário em checkpoint

O usuário precisa fazer login em https://www.facebook.com ou https://m.facebook.com para corrigir um problema.

460

Senha alterada

No iOS 6 e mais recentes, se a pessoa se conectou usando o fluxo integrado do SO, ela deverá ser redirecionada às configurações de SO do Facebook no dispositivo para atualizar a senha. Caso contrário, será necessário fazer login no aplicativo novamente.

463

Expirado

O status do login ou o token de acesso expirou, foi revogado ou está inválido de outra forma. Lide com tokens de acesso expirados.

464

Usuário não confirmado

O usuário precisa fazer login em https://www.facebook.com ou https://m.facebook.com para corrigir um problema.

467

Token de acesso inválido

O token de acesso expirou, foi revogado ou está inválido de outra forma. Lide com tokens de acesso expirados.

Parâmetros complexos

A maioria dos tipos de parâmetro é primitivo direto, como string e int, mas também há os tipos list e object, que podem ser especificados na solicitação.

O tipo list é especificado na sintaxe JSON, por exemplo: ["firstitem", "seconditem", "thirditem"]

O tipo object também é especificado na sintaxe JSON, por exemplo: {"firstkey": "firstvalue", "secondKey": 123}

Como depurar as solicitações de API

Modo de depuração da Graph API

Quando o Modo de depuração está habilitado, a resposta da Graph API pode conter outros campos que expliquem possíveis problemas com a solicitação.

Para habilitar o modo de depuração, use o parâmetro da cadeia de consulta debug. Por exemplo:

GET graph.facebook.com
  /v2.3/me/friends
    access_token=...&
    debug=all

Se a permissão user_friends não tiver recebido isso, ela produzirá a seguinte resposta:

{
  "data": [
  ], 
  "__debug__": {
    "messages": [
      {
        "message": "Field friends is only accessible on User object, if user_friends permission is granted by the user", 
        "type": "warning"
      }, 
      {
        "link": "https://developers.facebook.com/docs/apps/changelog#v2_0", 
        "message": "Only friends who have installed the app are returned in versions greater or equal to v2.0.", 
        "type": "info"
      }
    ]
  }
}

O valor do parâmetro debug pode ser definido como “all” ou como um nível de gravidade mínimo solicitado que corresponda ao type da mensagem:

Valor do parâmetro de depuração O que retornará

all

Todas as mensagens de depuração disponíveis.

info

Depurar mensagens com o tipo info e warning.

warning

Apenas mensagens de depuração com o tipo "warning".

As informações de depuração, quando estiverem disponíveis, serão retornadas como objeto JSON sob a chave __debug__ na matriz messages. Todo elemento desta matriz é um objeto JSON que contém estes campos:

Campo Datatype Descrição

mensagem

Cadeia de caracteres

A mensagem.

type

Cadeia de caracteres

A gravidade da mensagem.

link

Cadeia de caracteres

[Opcional] Uma URL apontando para informações relacionadas.

Você também pode usar o Modo de depuração com o Explorador da Graph API.

Como determinar a versão usada pelas Solicitações de API

Ao compilar um aplicativo, e fazer solicitações de Graph API, talvez você considere útil poder determinar de qual versão da API está recebendo a resposta. Por exemplo, se você estiver fazendo chamadas sem uma versão especificada, talvez não conheça a versão da API que responderá.

A Graph API fornece um cabeçalho de solicitação com qualquer resposta chamada facebook-api-version, indicando a versão exata da API que gerou a resposta. Por exemplo, uma chamada à Graph API que gera uma solicitação com v2.0 terá o seguinte cabeçalho HTTP:

facebook-api-version:v2.0

Este cabeçalho facebook-api-version permite determinar se as chamadas da API estão sendo retornadas da versão esperada.

Informações de depuração para denúncia de erros

Se você precisar denunciar um erro na Graph API, incluímos alguns cabeçalhos de solicitação adicionais que você precisa enviar com seu relatório de erros, a fim de nos ajudar a localizar e a reproduzir seu problema. Esses cabeçalhos de solicitação são X-FB-Debug, x-fb-rev e X-FB-Trace-ID.