{"id":24056,"date":"2021-05-11T13:48:00","date_gmt":"2021-05-11T10:48:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=24056"},"modified":"2021-10-17T21:06:10","modified_gmt":"2021-10-17T18:06:10","slug":"kuinka-kayttaa-laravel-passportia-rest-api-todennukseen","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/fi\/kuinka-kayttaa-laravel-passportia-rest-api-todennukseen\/","title":{"rendered":"Kuinka k\u00e4ytt\u00e4\u00e4 Laravel Passportia REST API -todennukseen"},"content":{"rendered":"<p>Nykyp\u00e4iv\u00e4n verkkokehityksess\u00e4 sovellusliittym\u00e4t tai verkkopalvelut ovat eritt\u00e4in suosittuja. Kehitt\u00e4ess\u00e4\u00e4n mobiilisovellusta API: lla on yhteys sillan siirt\u00e4miseen dataan mobiilisovelluksen ja verkon v\u00e4lill\u00e4. API-puheluiden pit\u00e4minen turvallisina ja todennettuna on t\u00e4rke\u00e4\u00e4 sovellusten v\u00e4lill\u00e4 siirrett\u00e4vien tietojen suojaamiseksi.<\/p>\n<p>T\u00e4ss\u00e4 artikkelissa tutkitaan Laravel Passportia, jonka avulla voimme todentaa sovellusliittymi\u00e4. Passport on rakennettu OAuth2-palvelimen p\u00e4\u00e4lle, mik\u00e4 on paljon turvallisempi tapa rakentaa.<\/p>\n<p>K\u00e4sitelless\u00e4mme sovellusliittymi\u00e4 k\u00e4ytimme p\u00e4\u00e4sykoodin l\u00e4hett\u00e4mist\u00e4 varmistaaksemme, ett\u00e4 saapuva pyynt\u00f6 on kelvollinen. Jos se on valtuutettu, vain sen tulisi sallia vuorovaikutus sovelluksen kanssa. Laravel-passi tarjoaa k\u00e4tev\u00e4n tavan luoda ja tarkistaa tunniste API-kutsua vastaan.<\/p>\n<h3>Asennus<\/h3>\n<p>Aloittamiseksi oletamme, ett\u00e4 olet asentanut Laravelin j\u00e4rjestelm\u00e4\u00e4si. Asenna Passport suorittamalla seuraava komento terminaalissa.<\/p>\n<pre><code>composer require laravel\/passport<\/code><\/pre>\n<p>Yll\u00e4 oleva komento toimii Laravelin uusimman version kanssa. Jos k\u00e4yt\u00e4t vanhempaa versiota, komento on hieman erilainen Laravel-versiostasi riippuen. Esimerkiksi, jos Laravel 5.5 on asennettu, komennosi tulisi olla:<\/p>\n<pre><code>composer require laravel\/passport=~4.0<\/code><\/pre>\n<p>T\u00e4m\u00e4 komento luo oman tietokannan siirtohakemiston. N\u00e4m\u00e4 siirrot luovat taulukoita, jotka tallentavat asiakkaita ja k\u00e4ytt\u00f6oikeustunnuksia.<\/p>\n<p>Rekister\u00f6i <code>config\/app.php<\/code>tiedostossasi Passport-palveluntarjoaja palveluntarjoajien ryhm\u00e4\u00e4n.<\/p>\n<p>config \/ app.php<\/p>\n<pre><code>'providers' =&gt;[\n\u00a0\u00a0....\n\u00a0\u00a0LaravelPassportPassportServiceProvider::class,\n],<\/code><\/pre>\n<p>Suoritetaan siirto, joka luo Passport-tietokantataulukot.<\/p>\n<pre><code>php artisan migrate<\/code><\/pre>\n<p>Jos siirryt nyt tietokantaasiakkaaseen, huomaat tietokantaan luodut uudet taulukot.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f24e4c0.png\" data-rel=\"lightbox\" ><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f24e4c0.png\" alt=\"Kuinka k\u00e4ytt\u00e4\u00e4 Laravel Passportia REST API -todennukseen\" ><\/a><\/p>\n<p>Suorita seuraavaksi alla oleva komento, joka luo salausavaimet suojattujen p\u00e4\u00e4sykoodien luomiseksi. Alla oleva komento luo &quot;henkil\u00f6kohtaisen k\u00e4ytt\u00f6oikeuden&quot; ja &quot;salasanan my\u00f6nt\u00e4minen&quot; -asiakkaat, jotka ovat tallessa taulukkoon <code>oauth_clients<\/code>.<\/p>\n<pre><code>php artisan passport:install<\/code><\/pre>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f2ddc78.png\" data-rel=\"lightbox\" ><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f2ddc78.png\" alt=\"Kuinka k\u00e4ytt\u00e4\u00e4 Laravel Passportia REST API -todennukseen\" ><\/a><\/p>\n<p>K\u00e4ytt\u00e4j\u00e4 voi kopioida n\u00e4m\u00e4 tunnukset seuraavia vaiheita varten. Oikeastaan \u200b\u200baiomme n\u00e4hd\u00e4 kaksi tapaa luoda k\u00e4ytt\u00f6oikeustunnuksia. Yksi on t\u00e4m\u00e4n &quot;salasanan my\u00f6nt\u00e4misen&quot; asiakkaiden kautta ja toinen kirjautumistodennuksessa.<\/p>\n<h3>Passin kokoonpano<\/h3>\n<p>Siirry Laravel-hakemistoihin ja avaa <code>AppUser<\/code>mallitiedosto. T\u00e4h\u00e4n tiedostoon meid\u00e4n on lis\u00e4tt\u00e4v\u00e4 <code>LaravelPassportHasApiTokens<\/code>piirre.<\/p>\n<p><strong>app \/ User.php<\/strong>.<\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace App;\n\u00a0\nuse LaravelPassportHasApiTokens;\nuse IlluminateNotificationsNotifiable;\nuse IlluminateFoundationAuthUser as Authenticatable;\n\u00a0\nclass User extends Authenticatable\n{\n\u00a0\u00a0\u00a0\u00a0use HasApiTokens, Notifiable;\n\u00a0\u00a0\u00a0\u00a0....\n}<\/code><\/pre>\n<p>T\u00e4m\u00e4n j\u00e4lkeen meid\u00e4n on kutsuttava <code>Passport::routes<\/code>metodi <code>boot<\/code>menetelm\u00e4ss\u00e4 <code>AuthServiceProvider<\/code>.<\/p>\n<p><strong>app \/ Providers \/ AuthServiceProvider.php<\/strong><\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppProviders;\n\u00a0\nuse LaravelPassportPassport;\nuse IlluminateSupportFacadesGate;\nuse IlluminateFoundationSupportProvidersAuthServiceProvider as ServiceProvider;\n\u00a0\nclass AuthServiceProvider extends ServiceProvider\n{\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* The policy mappings for the application.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @var array\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0protected $policies = [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'AppModel' =&gt; 'AppPoliciesModelPolicy',\n\u00a0\u00a0\u00a0\u00a0];\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Register any authentication \/ authorization services.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return void\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function boot()\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;registerPolicies();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Passport::routes();\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Viimeinkin <code>config\/auth.php<\/code>m\u00e4\u00e4rit\u00e4 tiedostossa &#8217;api&#8217; -todennusvalvojan &#8217;driver&#8217; -vaihtoehdoksi &#8217;passport&#8217; seuraavasti:<\/p>\n<p><strong>config \/ auth.php<\/strong><\/p>\n<pre><code>'guards' =&gt; [\n\u00a0\u00a0\u00a0\u00a0'web' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'driver' =&gt; 'session',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'provider' =&gt; 'users',\n\u00a0\u00a0\u00a0\u00a0],\n\u00a0\n\u00a0\u00a0\u00a0\u00a0'api' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'driver' =&gt; 'passport',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'provider' =&gt; 'users',\n\u00a0\u00a0\u00a0\u00a0],\n],<\/code><\/pre>\n<h3>Luo REST-sovellusliittym\u00e4 ja suojaa se Laravel Passportilla<\/h3>\n<p>Laravel luo tiedoston, <code>routes\/api.php<\/code>johon meid\u00e4n tulisi ilmoittaa REST-sovellusliittymien p\u00e4\u00e4tepiste. Voimme suojata sovellusliittym\u00e4\u00e4mme lis\u00e4\u00e4m\u00e4ll\u00e4 siihen v\u00e4liohjelmiston <code>auth:api<\/code>.<\/p>\n<p><strong>reitit \/ api.php<\/strong><\/p>\n<pre><code>Route::get('\/api\/categories', 'ApiController@categories')-&gt;middleware('auth:api');<\/code><\/pre>\n<p>Useita p\u00e4\u00e4tepisteit\u00e4 varten meid\u00e4n ei tarvitse lis\u00e4t\u00e4 v\u00e4liohjelmistoa joka kerta. Sen sijaan voimme tehd\u00e4 sen seuraavasti:<\/p>\n<pre><code>Route::group(['middleware' =&gt; 'auth:api'], function(){\n\u00a0\u00a0\u00a0\u00a0Route::get('products', 'ApiController@products');\n\u00a0\u00a0\u00a0\u00a0Route::get('categories', 'ApiController@categories');\n});<\/code><\/pre>\n<p>Koska p\u00e4\u00e4tetapahtumamme &#8217;tuotteet&#8217; on suojattu, jos kutsumme sit\u00e4 suoraan ilman valtuutusmerkki\u00e4, saamme &#8217;todentamattoman&#8217; vastauksen.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f2ddc78.png\" data-rel=\"lightbox\" ><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f2ddc78.png\" alt=\"Kuinka k\u00e4ytt\u00e4\u00e4 Laravel Passportia REST API -todennukseen\" ><\/a><\/p>\n<p>Se tarkoittaa, ett\u00e4 API-kutsun aikana on v\u00e4ltt\u00e4m\u00e4t\u00f6nt\u00e4 v\u00e4litt\u00e4\u00e4 Valtuutus-tunnus jokaisessa pyynn\u00f6ss\u00e4. Joten Passport tarkistaa tunnuksen ja palauttaa vastauksen.<\/p>\n<h3>Luo k\u00e4ytt\u00f6oikeustunnus API: lle<\/h3>\n<p>On olemassa useita tapoja luoda k\u00e4ytt\u00f6tunnus sovellukselle. N\u00e4emme 2 heist\u00e4 t\u00e4lle opetusohjelmalle.<\/p>\n<h4>Ensimm\u00e4inen vaihtoehto<\/h4>\n<p>Ensinn\u00e4kin joudut soittamaan \/ oauth \/ token vaadituilla parametreilla, ja saat tunnuksen vastauksena.<\/p>\n<p>Oletamme, ett\u00e4 k\u00e4yt\u00e4t <a href=\"https:\/\/themewp.inform.click\/fi\/kuinka-kayttaa-guzzlea-php-http-asiakas-http-pyyntojen-lahettamiseen\/\" title=\"Guzzlen HTTP-kirjastoa\" >Guzzlen HTTP-kirjastoa<\/a> API-pyynn\u00f6n tekemiseen. Oletetaan, ett\u00e4 sinulla on toinen projekti, josta teet API-pyynn\u00f6n.<\/p>\n<pre><code>&lt;?php\nrequire_once \"vendor\/autoload.php\";\n\u00a0\nuse GuzzleHttpClient;\n\u00a0\n$client = new Client([\n\u00a0\u00a0\u00a0\u00a0\/\/ Base URI is used with relative requests\n\u00a0\u00a0\u00a0\u00a0'base_uri' =&gt; 'http:\/\/laravel.dev',\n]);\n\u00a0\n$response = $client-&gt;post('\/oauth\/token', [\n\u00a0\u00a0\u00a0\u00a0'form_params' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'grant_type' =&gt; 'password',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'client_id' =&gt; '2',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'client_secret' =&gt; '8qyKG7WKb3O3FZh2hUyEOZ3dAj5l9S5ljn2bdeJf',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'username' =&gt; 'sajid@test.com',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'password' =&gt; 'my_password',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'scope' =&gt; '*',\n\u00a0\u00a0\u00a0\u00a0],\n]);\n\u00a0\n$arr_result = json_decode((string) $response-&gt;getBody(), true);<\/code><\/pre>\n<p>Yll\u00e4 oleva koodi palauttaa taulukon, joka sis\u00e4lt\u00e4\u00e4 avaimen &#8217;access_token&#8217;. Parametrit client_id ja client_secret saimme suoritettaessa <code>passport:install<\/code>. Voit my\u00f6s saada n\u00e4m\u00e4 tiedot tietokantataulukostasi &#8217;oauth_clients&#8217;.<\/p>\n<p>Yrit\u00e4 j\u00e4lleen postimiehelt\u00e4 siirt\u00e4m\u00e4ll\u00e4 access_token &#8217;tuotteet&#8217; -p\u00e4\u00e4tteelle, ja meid\u00e4n pit\u00e4isi saada vastaus.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f2ddc78.png\" data-rel=\"lightbox\" ><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f2ddc78.png\" alt=\"Kuinka k\u00e4ytt\u00e4\u00e4 Laravel Passportia REST API -todennukseen\" ><\/a><\/p>\n<p>Itse asiassa sinun on kutsuttava t\u00e4t\u00e4 sovellusliittym\u00e4\u00e4 kuten alla:<\/p>\n<pre><code>$response = $client-&gt;get('\/products', [\n\u00a0\u00a0\u00a0\u00a0'headers' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'Authorization' =&gt; 'Bearer '.$access_token,\n\u00a0\u00a0\u00a0\u00a0]\n]);\n\u00a0\n$arr_result = json_decode((string) $response-&gt;getBody(), true);<\/code><\/pre>\n<h4>Toinen vaihtoehto<\/h4>\n<p>Ensimm\u00e4isess\u00e4 vaihtoehdossa sinun on tiedett\u00e4v\u00e4 client_id ja client_secret tunnuksen luomiseksi. T\u00e4m\u00e4 ei v\u00e4ltt\u00e4m\u00e4tt\u00e4 ole sopiva tapa joissakin tilanteissa. Passport tarjoaa toisen vaihtoehdon luoda tunnuksen vain kirjautumistiedoilla.<\/p>\n<p>Meid\u00e4n <code>ApiController.php<\/code>lis\u00e4t\u00e4 sis\u00e4\u00e4nkirjautumismenettely post pyynn\u00f6n ja kirjoittaa alla koodi sit\u00e4.<\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppHttpControllers;\n\u00a0\nuse IlluminateHttpRequest;\nuse IlluminateSupportFacadesStorage;\nuse IlluminateSupportFacadesAuth;\n\u00a0\nclass ApiController extends Controller\n{\n\u00a0\u00a0\u00a0\u00a0public function login(){ \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if(Auth::attempt(['email' =&gt; request('email'), 'password' =&gt; request('password')])){ \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$user = Auth::user(); \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$success['token'] =\u00a0 $user-&gt;createToken('MyApp')-&gt; accessToken; \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return response()-&gt;json(['success' =&gt; $success], 200); \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0else{ \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return response()-&gt;json(['error'=&gt;'Unauthorised'], 401); \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} \n\u00a0\u00a0\u00a0\u00a0}<\/code><\/pre>\n<p>T\u00e4m\u00e4n API-puhelun soittamiseksi meid\u00e4n on rekister\u00f6it\u00e4v\u00e4 reitti sille.<\/p>\n<p><strong>reitit \/ api.php<\/strong><\/p>\n<pre><code>Route::post('login', 'ApiController@login');<\/code><\/pre>\n<p>K\u00e4ytt\u00e4j\u00e4 voi tehd\u00e4 HTTP-l\u00e4hetyspyynn\u00f6n t\u00e4lle API: lle kirjoittamalla alla olevan koodin:<\/p>\n<pre><code>$response = $client-&gt;post('\/api\/login', [\n\u00a0\u00a0\u00a0\u00a0'form_params' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'email' =&gt; 'sajid@test.com',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'password' =&gt; 'my_password'\n\u00a0\u00a0\u00a0\u00a0],\n]);\n\u00a0\n$arr_result = json_decode((string) $response-&gt;getBody(), true);<\/code><\/pre>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f2ddc78.png\" data-rel=\"lightbox\" ><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f2ddc78.png\" alt=\"Kuinka k\u00e4ytt\u00e4\u00e4 Laravel Passportia REST API -todennukseen\" ><\/a><\/p>\n<p>Toivomme, ett\u00e4 ymm\u00e4rr\u00e4t Laravel Passportin k\u00e4yt\u00f6n REST API -todennuksessa. Haluamme kuulla ajatuksesi alla olevassa kommenttiosassa. Suosittelemme my\u00f6s tutustumaan artikkeliin <a href=\"https:\/\/www.toptal.com\/laravel\/restful-laravel-api-tutorial\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Laravel API Tutorial: How to build and Test RESTful API,<\/a> jonka pidimme hy\u00f6dyllisen\u00e4 lukijoille.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Etsitk\u00f6 Laravel Passportia sovelluksessasi? T\u00e4ss\u00e4 artikkelissa n\u00e4yt\u00e4mme ypu: lle kuinka Passport asennetaan, m\u00e4\u00e4ritet\u00e4\u00e4n ja miten sit\u00e4 k\u00e4ytet\u00e4\u00e4n.<\/p>\n","protected":false},"author":1,"featured_media":22200,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[499],"tags":[843],"class_list":["post-24056","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/posts\/24056","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/comments?post=24056"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/posts\/24056\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/media\/22200"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/media?parent=24056"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/categories?post=24056"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/tags?post=24056"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}