API's

REST, SOAP OR GRAPHQL?

When you make a data query in GraphQL, you specify exactly what you wish to receive. Such results are achieved through shifting the data definition functions to the client side, while in REST, data is defined on the server side. In other words, in REST API architecture, the server defines which data is to be returned, while in GraphQL API, the server only declares the available data, and the client specifies what should be returned.
Another thing you should consider while choosing the API protocol is data caching. Caching eliminates the need to send full requests and responses in case data has been cached from previous requests. REST API uses the HTTP caching mechanism that provides quite satisfactory results. At the same time, GraphQL has no inherent caching and requires additional mechanisms on the client side, such as Apollo Client.
  • SOAP can be used in enterprise solutions with formal contract-based exchange formats. Also, SOAP APIs perform best when there are acceleration mechanisms implemented on both sides.
  • REST is very JavaScript-friendly, so it is a perfect choice for JavaScript-based applications. Besides, it can cope with higher loads and process data quicker than SOAP. Thus if your application is rather load-intensive, REST may be your API of choice.
  • GraphQL can show the best performance when the number of queries needs to be reduced to the absolute minimum. With its single query addressing multiple resources, GraphQL can be a good match to this challenge. Also, considering the fact that in GraphQL data is defined on the client side, it can be a good solution for cases when there is no dependency between the client application and the server.

API endpoint naming rules

Facebook page feed

Po Cambridge Analytica įvykių Facebook sugriežtino duomenų prieigą ir jei anksčiau viešus duomenis galėdavo pasiimti bet kas, tai dabar atsirado papildomų niuansų - norint gauti puslapio duomenis, reikia turėti Page Public Content Access teises, o joms gauti reikia praeiti visą App Review procesą, kuris susideda ne tik iš įmonės duomenų suvedimo, tačiau reikia pateikti aprašymą ir nuorodas, kurios demonstruotų, kaip šios teisės bus naudojamos. Tačiau yra viena išlyga - šių teisių nereikia, jei vartotojas turi manage_page teises tam puslapiui. Kitaip tariant - jei tai puslapio administratorius.

Access Token generavimas

Taigi užtenka tik susigeneruoti token'us ir juos naudoti duomenų paėmimui:
  • Pirmiausia pradedama nuo New App sukūrimo Facebook Developers puslapyje ir ten nusikopijuojame App ID ir Secret
  • Einama į Facebook Graph API Explorer ir sugeneruojamas trumpos trukmės user access token'as. Teises vartotojui priskiriame "manage_pages" ir "pages_show_list". Sukūrus nusikopijuojam Access Token reikšmę.
  • Einam į Access Token Tool. Jeigu prie Apps'o nėra User Token, tai sugeneruojame jį. Jei yra, tai tiesiog spaudžiame Debug.
  • Atsidariusiame lange įpastinama Access Token, kuris buvo nukopijuotas Graph API Explorer puslapyje ir spaudžiama Debug. Po paspaudimo matoma duomenų lentelė, kurioje turėtų matytis, kad Expires reikšmė yra 1h. Lentelės apačioje spaudžiame "Extend Access Token". Bus sugeneruotas naujas "long-lived" raktas, galiojantis 2mėn.
  • Grįžtama į Graph API Explorer, čia į Access Token lauką įstatomas šitas long lived token'as, o kaip endpoint nurodomas "/me/accounts". Spaudžiam submit ir jei viskas ok, turimas gauti teigiamas response, iš kurio reikalingas naujasis, nesibaigiantis "Access Token" kuris ir yra reikalingas.
  • Pasitikriname jį: einam vėl į Access Token Debugger, susivedam jo reikšmę ir šį kartą Expires reikšmė turėtų būti "Never"

Api naudojimas

1
composer require facebook/graph-sdk
2
3
--
4
require_once __DIR__ . '/vendor/autoload.php';
5
6
$fb = new \Facebook\Facebook([
7
'app_id' => '{app-id}',
8
'app_secret' => '{app-secret}',
9
'default_graph_version' => 'v2.10',
10
//'default_access_token' => '{access-token}', // optional
11
]);
12
13
$response = $fb->get('/{page-id}/posts?&fields=id,created_time,permalink_url,message,attachments', {access-token});
Copied!
Last modified 6mo ago