{"id":229400,"date":"2022-10-31T20:24:00","date_gmt":"2022-10-31T17:24:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229400"},"modified":"2022-11-09T06:52:07","modified_gmt":"2022-11-09T03:52:07","slug":"mitae-wordpressin-kaeyttaeminen-vaelityspalvelimena-tarkoittaa","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/mitae-wordpressin-kaeyttaeminen-vaelityspalvelimena-tarkoittaa\/","title":{"rendered":"Mit\u00e4 WordPressin k\u00e4ytt\u00e4minen v\u00e4lityspalvelimena tarkoittaa?"},"content":{"rendered":"\n<p>Jos olet ty\u00f6skennellyt WordPressin kanssa pitk\u00e4\u00e4n, varsinkin kun on kyse jonkin Ajax-toiminnon k\u00e4yt\u00f6st\u00e4, olet todenn\u00e4k\u00f6isesti kuullut lauseen &quot;k\u00e4yt\u00e4 WordPressi\u00e4 v\u00e4lityspalvelimena&quot; jossain vaiheessa.<\/p>\n<p>Ja vaikka sinulla ei olisikaan todenn\u00e4k\u00f6isyytt\u00e4, ett\u00e4 olet todella tehnyt sen, ovat melko korkeat.<\/p>\n<p>Vaikka uskonkin, ett\u00e4 kun aika kuluu eteenp\u00e4in, tulemme lopulta n\u00e4kem\u00e4\u00e4n REST API:n korvaavan perinteiset tavat, joita olemme k\u00e4ytt\u00e4neet Ajaxia, mutta se on todenn\u00e4k\u00f6isesti eri tarina toisella kerralla.<\/p>\n<p>Mit\u00e4 WordPressin k\u00e4ytt\u00e4minen v\u00e4lityspalvelimena tarkoittaa aina, kun ty\u00f6skentelet Ajax-pyynt\u00f6jen kanssa? Se vaatii hieman ymm\u00e4rryst\u00e4 sivustojen v\u00e4lisist\u00e4 pyynn\u00f6ist\u00e4, kuinka pyynn\u00f6n reititys WordPressin kautta toimii, ja sitten vastauksen j\u00e4sent\u00e4mist\u00e4.<\/p>\n<h2>K\u00e4yt\u00e4 WordPressi\u00e4 v\u00e4lityspalvelimena<\/h2>\n<p>Se on v\u00e4h\u00e4n pitk\u00e4 postaus, eik\u00f6? Sen sijaan yrit\u00e4n jakaa sen lyhyemmiksi, jotta voit lukea sen ja palata t\u00f6ihin.<\/p>\n<h3>V\u00e4lityspalvelimena<\/h3>\n<p>Ota ensin <a href=\"https:\/\/www.google.com\/search?q=define%3A+proxy&#038;oq=define%3A+proxy&#038;aqs=chrome..69i57j69i58.1706j0j7&#038;sourceid=chrome&#038;ie=UTF-8\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">v\u00e4lityspalvelimen m\u00e4\u00e4ritelm\u00e4<\/a> :<\/p>\n<blockquote>\n<p>valtuudet edustaa jotakuta toista, erityisesti \u00e4\u00e4nest\u00e4ess\u00e4<\/p>\n<\/blockquote>\n<p>Jos napsautat yll\u00e4 olevaa linkki\u00e4, huomaat, ett\u00e4 on olemassa muutamia muita m\u00e4\u00e4ritelmi\u00e4, mutta mik\u00e4\u00e4n niist\u00e4 ei todellakaan riit\u00e4. Sen sijaan haluan ajatella niit\u00e4 hieman abstraktimmin ainakin ohjelmistojen osalta.<\/p>\n<p>Oletetaan t\u00e4t\u00e4 viesti\u00e4 varten, ett\u00e4 WordPress on pyynn\u00f6n v\u00e4lityspalvelin, mik\u00e4 tarkoittaa, ett\u00e4 se on vastuussa v\u00e4litt\u00e4j\u00e4n\u00e4 pyynn\u00f6n alun ja siihen vastauksen v\u00e4lill\u00e4.<\/p>\n<p>Lyhyesti,<\/p>\n<blockquote>\n<p>WordPress toimii v\u00e4lityspalvelimena reititt\u00e4m\u00e4ll\u00e4 pyynn\u00f6n toiseen palveluun ja tallentamalla sen vastauksen.<\/p>\n<\/blockquote>\n<p>Ehk\u00e4 olet kuullut jotain vastaavaa, ehk\u00e4 et. Siit\u00e4 huolimatta, t\u00e4lt\u00e4 se voisi n\u00e4ytt\u00e4\u00e4 korkealla tasolla:<\/p>\n<p>Nyt, kun sinun on teht\u00e4v\u00e4 asynkroninen pyynt\u00f6 (tai Ajax-pyynt\u00f6, jota k\u00e4yt\u00e4n t\u00e4m\u00e4n viestin loppuosassa), sinulla on jompikumpi kahdesta vaihtoehdosta:<\/p>\n<ol>\n<li>tehd\u00e4 pyynt\u00f6 sivulle, joka on olemassa WordPressiss\u00e4,<\/li>\n<li>l\u00e4het\u00e4 pyynt\u00f6 sivulle, joka on toisessa verkkotunnuksessa.<\/li>\n<\/ol>\n<p>Jos teet pyynt\u00f6j\u00e4 sovelluksessasi (lue: WordPressiss\u00e4) oleville sivuille, sinulla ei ole ongelmia.<\/p>\n<h3>Pyynt\u00f6jen turvallisuudesta<\/h3>\n<p>Mutta Ajax-pyynt\u00f6jen tekeminen oman verkkotunnuksesi ulkopuolella on kielletty\u00e4. T\u00e4m\u00e4 johtuu siit\u00e4, ett\u00e4 se on tarkoitettu suojaamaan <a href=\"https:\/\/www.owasp.org\/index.php\/Cross-site_Scripting_(XSS)\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">XSS<\/a> :\u00e4\u00e4 ja <a href=\"https:\/\/www.owasp.org\/index.php\/Cross-Site_Request_Forgery_(CSRF)\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">CSRF<\/a> :\u00e4\u00e4 .<\/p>\n<p>Lyhyesti sanottuna jokainen n\u00e4ist\u00e4 viittaa seuraavaan:<\/p>\n<blockquote>\n<p>XSS-hy\u00f6kk\u00e4ykset tapahtuvat, kun hy\u00f6kk\u00e4\u00e4j\u00e4 k\u00e4ytt\u00e4\u00e4 verkkosovellusta haitallisen koodin l\u00e4hett\u00e4miseen, yleens\u00e4 selainpuolen komentosarjan muodossa, toiselle loppuk\u00e4ytt\u00e4j\u00e4lle.<\/p>\n<\/blockquote>\n<p>ja:<\/p>\n<blockquote>\n<p>Cross-Site Request Forgery (CSRF) on hy\u00f6kk\u00e4ys, joka pakottaa loppuk\u00e4ytt\u00e4j\u00e4n suorittamaan ei-toivottuja toimintoja verkkosovelluksessa, jossa h\u00e4n on t\u00e4ll\u00e4 hetkell\u00e4 todennettu.<\/p>\n<\/blockquote>\n<p>Lyhyesti sanottuna meid\u00e4n on k\u00e4ytett\u00e4v\u00e4 WordPressi\u00e4 v\u00e4lityspalvelimena. Luonnollisesti t\u00e4m\u00e4 kuitenkin her\u00e4tt\u00e4\u00e4 kysymyksen, miten?<\/p>\n<h3>WordPressin k\u00e4ytt\u00e4minen v\u00e4lityspalvelimena<\/h3>\n<p>T\u00e4t\u00e4 varten tarvitset useita asioita:<\/p>\n<ol>\n<li>\u00a0sivu, jolta Ajax-pyynt\u00f6si voi kysy\u00e4,<\/li>\n<li>toiminto, joka nappaa ajax-pyynn\u00f6n ja l\u00e4hett\u00e4\u00e4 sen oikeaan URL-osoitteeseen,<\/li>\n<li>palvelinpuolen tapa j\u00e4sent\u00e4\u00e4 vastaus,<\/li>\n<li>toiminto palauttaa tiedot alkuper\u00e4iseen Ajax-funktioon.<\/li>\n<\/ol>\n<p>J\u00e4lleen tilan vuoksi en anna t\u00e4st\u00e4 syv\u00e4llist\u00e4 esimerkki\u00e4, mutta sen pit\u00e4isi riitt\u00e4\u00e4 aloittamiseen.<\/p>\n<p>Ensin sinun on varmistettava, ett\u00e4 sinulla on toiminto asetettu Ajax-pyynt\u00f6si saamiseen. Codexissa on jo paljon dokumentaatiota aiheesta. <a href=\"https:\/\/gist.github.com\/tommcfarlin\/833c1d1819b8863697aea00a716b2116#file-01_get_columns-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Yksinkertainen esimerkki<\/a> t\u00e4st\u00e4 n\u00e4ytt\u00e4isi t\u00e4lt\u00e4:<\/p>\n<pre><code>var _get_columns = function() {\n\n    \/\/ Don't forget to use a nonce or security value here.\n    var data = {\n        'action':   'get_all_columns'\n            'security': '&lt;?php echo wp_create_nonce( \"acme-security-ajax-nonce\" ); ?&gt;'\n    };\n\n    \/\/ TODO Check for error logging if the response value doesn't exist.\n    $.get( ajaxurl, data, function( response) {\n\n        response = $.parseJSON( response );\n        \/\/ Your custom functionality here\n    });\n};\n<\/code><\/pre>\n<p>Seuraavaksi tarvitset sivun palvelimella tehd\u00e4ksesi pyynn\u00f6n tietosi sis\u00e4lt\u00e4v\u00e4lle URL-osoitteelle. T\u00e4m\u00e4 voidaan tehd\u00e4 k\u00e4ytt\u00e4m\u00e4ll\u00e4 <a href=\"https:\/\/curl.haxx.se\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cURL<\/a> &#8211; osoitetta, t\u00e4m\u00e4 voidaan tehd\u00e4 k\u00e4ytt\u00e4m\u00e4ll\u00e4 <a href=\"https:\/\/php.net\/manual\/en\/function.file-get-contents.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">file_get_contents<\/a> ja t\u00e4m\u00e4 voidaan tehd\u00e4 jollain muulla tavalla.<\/p>\n<p>Koska en tied\u00e4 enk\u00e4 halua antaa ohjeellista esimerkki\u00e4, jaan hyvin yksinkertaisen demon siit\u00e4, miten t\u00e4m\u00e4 voisi toimia (<a href=\"https:\/\/gist.github.com\/tommcfarlin\/833c1d1819b8863697aea00a716b2116#file-02-wp_ajax_get_all_data-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ainakin alkuvaiheessa<\/a> ):<\/p>\n<pre><code>&lt;?php\n\nadd_action( 'wp_ajax_get_all_data', 'get_all_data' );\n\/**\n * Retrieves the requested data from the specified URL \n * returns the values in JSON.\n *\/\nfunction get_all_data() {\n\n  \/\/ Note $url is up to you.\n  $curl = curl_init( $url );\n\n  curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );                         \n  curl_setopt( $curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY );                    \n  curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, false );                          \n  curl_setopt( $curl, CURLOPT_FOLLOWLOCATION, true );                           \n\n  $response     = curl_exec( $curl );                                          \n  $resultStatus = curl_getinfo( $curl );                                   \n\n  if( 200 !== $resultStatus['http_code']) {\n    echo 'Call Failed '.print_r( $result_status );                         \n  }\n  curl_close( $curl );\n\n  echo json_encode( utf8_encode( $response) ); \n  wp_die();\n}\n<\/code><\/pre>\n<p>Kun saat vastauksen, voit j\u00e4sent\u00e4\u00e4 sen palvelinpuolella (mit\u00e4 suosittelen) ja palauttaa sen kevyess\u00e4 muodossa alkuper\u00e4iseen JavaScript-toimintoon, kuten yll\u00e4 n\u00e4kyy. Huomaa, ett\u00e4 k\u00e4yt\u00e4n <a href=\"https:\/\/php.net\/manual\/en\/function.json-encode.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">json_encodea<\/a> yll\u00e4 olevassa koodissa.<\/p>\n<p>Sielt\u00e4 voit sitten tehd\u00e4 mit\u00e4 tahansa kyseiselle sivulle omistamillasi tiedoilla. Huomaa, ett\u00e4 tiedot sis\u00e4ltyv\u00e4t vastausobjektiin ja sinun on ehk\u00e4 tarkastettava, mit\u00e4 se sis\u00e4lt\u00e4\u00e4, jotta voit k\u00e4sitell\u00e4 niit\u00e4 oikein. T\u00e4m\u00e4 onnistuu ja n\u00e4kyy yll\u00e4 olevassa koodissa.<\/p>\n<p>Mutta t\u00e4m\u00e4n yksityiskohdat riippuvat suuresti siit\u00e4, mit\u00e4 aiot saavuttaa.<\/p>\n<h2>WordPress v\u00e4lityspalvelimena<\/h2>\n<p>Lopulta ohjausvirta n\u00e4ytt\u00e4\u00e4 t\u00e4lt\u00e4:<\/p>\n<p>Kaiken edell\u00e4 olevan tarkoitus on auttaa antamaan taustaa sille, miksi saatat n\u00e4hd\u00e4 osan tekem\u00e4st\u00e4si koodista, ja miksi sinun on rakennettava koodisi t\u00e4ll\u00e4 tavalla.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mit\u00e4 WordPressin k\u00e4ytt\u00e4minen v\u00e4lityspalvelimena tarkoittaa aina, kun ty\u00f6skentelet Ajax-pyynt\u00f6jen kanssa? Katso n\u00e4m\u00e4 esimerkit.<\/p>\n","protected":false},"author":1,"featured_media":223885,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[719,895,917,843,864],"tags":[1166],"class_list":["post-229400","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-koodi","category-muut","category-opetusohjelmia","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229400","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=229400"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229400\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/223885"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=229400"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=229400"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=229400"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}