JavaScript Blog

A PHP-ből soha nem lesz JavaScript

2022. június 05. - BATZOZOO

Azt hittem, hogy csempészhetek egy kis JavaScript feelinget a PHP-be, sajnos nemsikerült. Vagyis csak félig.

phplogo.jpg

PHP-ben akartam megoldani, hogy az itemek egy  ciklusból csak szép sorjában íródjanak ki a képernyőre. Tehát futás közben már renderelődjön is a tartalom a böngészőben.
Ennek tesztelésére készítettem egy rövid kódot:

Tovább

Az API Proxy bemutatása - Node.JS

Az előző cikkben, amiben az API kulcs backend-en történő elrejtéséről írtam, ígértem, hogy kifejtem majd részletesebben is az API proxy működését, ami nem teljesen transzparens proxy, mert a küldött adatokat is átalakítja, illetve a fő proxyra küldött API kulcsot is elrejti a végfelhasználó elől.
Most, hogy egy kódszínezőt is beépítettem a bogba, így minden készen áll arra, hogy kicsit részletesebben is bemutathassam az API proxy működését.

Tovább

Beépítettem a Prism.Js-t a blogba

Mostantól szép színes kódokkal tudom bővíteni az írásaimat a Prism.JS segítségével.

Így fog kinézni egy átlagos JS kód:


//This is a comment line

function myFunctioon(argument){
	return argument;
}

let myString = "This is a string";
const myArr = [3, 2, 1];
var myJson = {
	key1: "value1",
    key2: "value2",
    key3: "value3",
}

document.querySelector('click', ()=>{
	const variable = undefined;
    let templateLiteral = `This is a ${variable}`;
    if(variable){
    	console.log("OK" + "OK")
    }else{
    	alert("NOT OK")
     }
})

myArr.map((item, index)=>{
	root.innerHTML = String(item) + " " + String(index)
    //Amúgy nem teszünk innerHTML-t ciklusba !!! :)
})

 

Így pedig a HTML

<!-- HTML COMMENT -->
<div id="root">CONTENT</div>
<input type="number" required>

 

És a CSS. (Itt például külön kis négyzetben láthatók lesznek a színek is)


	body {
		margin: 0px;
	}
    #idselector {
    	color: white;
    }
    .classelector {
    	color: green;
    }

 

És a JSON


{
  "key1":{"subkey1":"subvalue1", "subkey2":"subvalue2" },
  "key2":{"subkey1":"subvalue1", "subkey2":"subvalue2" },
  "key3":{"subkey1":"subvalue1", "subkey2":"subvalue2" },
}

 

A jobboldali copy gombra kattintással azonnali kimásolásra is lehetőség van.

PRISM.JS

Ma egy kicsit elszórakoztam a Prism.JS-el (https://prismjs.com/), ami egy kódszínező, azaz JS (vagy akár HTML és/vagy CSS) példakódokat lehet vele színezni. A későbbiekben ezt itt, ezen a blogon akarom majd használni, hogy mintakódokat szép formában tudjam megosztani. Tudom kicsit papagájkóros lett a produktum, de legalább kicsit jobban kiismertem a lelkivilágát színezgetés által :)

Az API kulcs elrejtése a backenden

Egyik webfejlesztéssel foglalkozó csoportban szó volt arról, hogy hogyan lehet elrejteni egy API kulcsát.

Az API-k nagy része kulcsot (van ahol token-nek hívják) kér, hogy hozzáférhess az adataihoz. Ha ezt a kulcsot vagy tokent publikus helyre rakod ki, például frontend kódba, akkor az is előfordulhat, hogy ezt valaki ellopja. És ha a kulcs nincs pluszban hozzárendelve az oldaladhoz, akkor simán használhatja a saját oldalán. Ha az API erőforrás korlátozva van (például meg van szabva havi vagy napi limit), akkor, ha más is a te kulcsodat használja, akkor az a te limited kárára fog menni. Ez akkor a legszebb, ha esetleg valamely limit elérése után esetleg még fizetned is kell. Akkor bizony bajban vagy, ha lelopták a kulcsod és mondjuk 10000 hívást kezdeményeztek vele az API felé.

Mi a megoldás? Helyezzük az API kulcsot backend-re, ami lehet PHP vagy akár Node.JS vagy akár Python is. A szerveren is a legjobb, ha nem a source kódba tesszük, mert mi is elkövethetünk olyan hibát, hogy valahogy kipublikáljuk a forráskódot a szerverről csak úgy alanature vagy esetleg szeretnénk feltenni a kódunat a Githubra és ezzel együtt az API-unk kulcsát is kitesszük oda. És akkor ország-világ viheti. Épp ezért egy környezeti változóba érdemes tenni jól elkülönített helyen a forráskódtól is. A PHP esetében be lehet tenni a PHP.ini-be vagy node esetén .env fájlba, amit véletlen se töltünk fel sehová vagy nem válik letölthetővé akár egy szerveres bug miatt. Ahogy a MySQL user/pass adatokat sem tesszük ki ilyen helyekre, így az API kulcsokkal is érdemes így bánnunk. 

Készítettem NODE.JS-el egy API proxyt, ami fetchel rácsatlakozik a Weatherapi.com-ra, megadja neki a környezeti változóból az API kulcsot. A kapott adatokból új JSON adatot generál. Úgy van beállítva, hogy csak egy bizonyos origin-ből férhessenek hozzá. (A példakódban ez most a cdpn.io). Így a Codepenes frontendről nem az API kulcsommal indítok kérést a Weatherapi.com felé, hanem a PROXY backendemhez a kulcs nélkül. A kérésre a PROXY BACKEND indít kérést a Weather.com felé és elküldi az adatokat és az API kulcsot is. A választ pedig továbbítja a Codepenes frontend felé. Így a frontend semmit nem tud a kulcsról.

PROXY BACKEND: https://codesandbox.io/s/weather-proxy-pmuilu?file=/Server.js

FRONTEND: https://codepen.io/bzozoo/pen/JjpLEMM

WEATHERAPI.COM dokumentáció:

https://www.weatherapi.com/docs/

Először a backendet nyissátok meg, mert ezek a Codesandbox-os Node backendek olyanok, hogy ha nincs feléjük kérés, akkor maguktól "elalszanak"

A későbbiekben pedig írok bejegyzést magáról a kódról is. 

Csak kíváncsi vagyok, hogy működik e a FetchAPI a Blog.hu oldalán

Kipróbáltam, hogy FetchAPI-al le tudom e kérni Budapest aktuális időjárását egyenesen bele egy cikkbe vagy nevezzük ezt most postnak a Blog.hu-n.

weather-api.png

 Elsőként a JavaScript kódot próbáltam beszúrni magába a post szerkesztőbe. Sajnos azt nem engedte megjeleníteni (automatikusan CDATA tagek közé zárta a script kódokat), illetve js cdn-nek sem sikerült használnom a blog.hu-t ( Megpróbáltam feltenni a sablon fájlok közé :D)
Aztán gondoltam egyet és felraktam a js részt a Guthubon egy Repo-ba, azt publikáltam Github Pages-el és azt linkeltem be ide "<script src="..."></script>"  formában a postba.

Tovább

JavaScript Optional chaining

Objektumok/JSON adat használatakor fel kell készíteni a weboldalad vagy webalkalmazásod arra, hogy egy objektum keresett kulcsértékpárja nem létezik, illetve a keresett kulcs alatt található kulcsértékpárok sem. Ezt ellenőrizheted If-el is, de ez nagyon hosszú és kevésbé átlátható kódot eredményez. Erre találták ki a JavaScriptben az optional cahaininget.

Egy objektum / json adat értékét az objektum kulcsainak megadásával érhetjük el. Például, ha az users objektumunkban található egy user1 kulcs és az alatt egy email kulcs, akkor ezt users.user1.email formában érhetjük el. De mi történik akkor, ha nem létezik az user1 kulcs? Hibát kapunk. ugyanis user.user1 értéke undefined lesz, az undefined-nak pedig nincs email nevű property-je így users.user1.email-re már nem undefined-ot, hanem hibát kapunk, ami a JS kódunk teljes megállásával jár, azaz nem fut tovább.

Tovább
süti beállítások módosítása