{
    "id": 638,
    "date": "2018-04-20T21:12:11",
    "date_gmt": "2018-04-20T21:12:11",
    "guid": {
        "rendered": "http:\/\/hayperek.pl\/?p=638"
    },
    "modified": "2018-04-20T21:12:11",
    "modified_gmt": "2018-04-20T21:12:11",
    "slug": "frontend-i-backend-w-jednym-stali-domu",
    "status": "publish",
    "type": "post",
    "link": "https:\/\/hayperek.pl\/pl_pl\/2018\/04\/20\/frontend-i-backend-w-jednym-stali-domu\/",
    "title": {
        "rendered": "Frontend i backend w jednym stali domu&#8230;"
    },
    "content": {
        "rendered": "<p>Zapewne cz\u0119\u015b\u0107 z Was zastanawia si\u0119 w jaki spos\u00f3b na widgetach pojawiaj\u0105 si\u0119 r\u00f3\u017cne warto\u015bci pomiarowe &#8211; napi\u0119cie, pr\u0119dko\u015b\u0107, ilo\u015b\u0107 paliwa. Sk\u0105d pobierane s\u0105 te informacje? Najbardziej intuicyjnym podej\u015bciem wydaje si\u0119 by\u0107 odpytanie z poziomu samego widgetu odpowiedniego kana\u0142u diagnostyki lub czujnika. Je\u017celi spojrzymy w kod \u017ar\u00f3d\u0142owy podobnych system\u00f3w dost\u0119pnych w sieci, oka\u017ce si\u0119, \u017ce jest to bardzo cz\u0119sto spotykane rozwi\u0105zanie. <\/p>\n<p>Je\u015bli z kolei si\u0119gniemy do wcze\u015bniejszych rozwa\u017ca\u0144, zauwa\u017cymy, i\u017c tego rodzaju podej\u015bcie jest sprzeczne z naszymi za\u0142o\u017ceniami, gdy\u017c wymusza przeplatanie si\u0119 wysokopoziomowego kodu aplikacyjnego z kodem platformowym. <\/p>\n<blockquote><p>Czy\u017cby ponownie mia\u0142 pojawi\u0107 si\u0119 podzia\u0142 na warstwy?<\/p><\/blockquote>\n<p>Bingo! Ale spokojnie, tym razem b\u0119d\u0105 tylko dwie. Osoby zajmuj\u0105ce si\u0119 programowaniem zapewne domy\u015blaj\u0105 si\u0119 ju\u017c, \u017ce chodzi tu tytu\u0142owy frontend oraz backend<\/p>\n<blockquote><p>Ok. A czym one w\u0142a\u015bciwie s\u0105? <\/p><\/blockquote>\n<p>Frontend to najog\u00f3lniej interfejs u\u017cytkownika; to co widzimy patrz\u0105c w ekran. Jego zadaniem jest prezentacja danych &#8211; nie tylko samo ich wy\u015bwietlenie, ale r\u00f3wnie\u017c np. konwersja na format zrozumia\u0142y dla cz\u0142owieka. Backend, jak sugeruje nazwa, jest niewidoczny dla u\u017cytkownika i jego g\u0142\u00f3wn\u0105 rol\u0105 jest zbieranie i dostarczanie danych do frontendu.<\/p>\n<blockquote><p>Jak przek\u0142ada si\u0119 to na nasz projekt?<\/p><\/blockquote>\n<p>W sk\u0142ad frontendu wchodzi tworzony przez nas aktualnie system widget\u00f3w. Ich rola ograniczona zosta\u0142a tylko i wy\u0142\u0105cznie do wy\u015bwietlania danych na ekranie. Zadanie zbierania danych z r\u00f3\u017cnych \u017ar\u00f3de\u0142 i przekazywania ich na \u017c\u0105danie do widgetu spoczywa na barkach backendu. W jego sk\u0142ad wchodz\u0105 stworzone wcze\u015bniej komponenty obs\u0142uguj\u0105ce \u017ar\u00f3d\u0142a danych: <a href=\"http:\/\/hayperek.pl\/pl_pl\/2018\/04\/03\/diagnostyka-obd-cz-1\/\">diagnostyk\u0119 <\/a>oraz <a href=\"http:\/\/hayperek.pl\/pl_pl\/2018\/04\/06\/interfejs-can-cz-1\/\">magistral\u0119 CAN<\/a>.  <\/p>\n<p>Schemat interakcji wygl\u0105da nast\u0119puj\u0105co:<\/p>\n<p><a href=\"http:\/\/hayperek.pl\/wp-content\/uploads\/2018\/04\/frontend_backend.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/hayperek.pl\/wp-content\/uploads\/2018\/04\/frontend_backend.png\" alt=\"\" width=\"842\" height=\"728\" class=\"aligncenter size-full wp-image-666\" srcset=\"https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/04\/frontend_backend.png 842w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/04\/frontend_backend-600x519.png 600w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/04\/frontend_backend-300x259.png 300w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/04\/frontend_backend-768x664.png 768w\" sizes=\"auto, (max-width: 842px) 100vw, 842px\" \/><\/a><\/p>\n<p>Zalet\u0105 powy\u017cszego podej\u015bcia jest przede wszystkim konsekwentne separowanie cz\u0119\u015bci aplikacyjnej od platformy. Co wi\u0119cej, u\u017cycie demona\/us\u0142ugi danych pomiarowych umo\u017cliwia p\u00f3\u017aniejsze wykorzystanie go jako \u017ar\u00f3d\u0142a dla innych aplikacji,a nie jedynie dla widget\u00f3w. W ten spos\u00f3b, niejako przy okazji, powsta\u0142a elastyczna i do\u015b\u0107 uniwersalna platforma, funkcjonalnie zbli\u017cona do bazy danych.<\/p>",
        "protected": false
    },
    "excerpt": {
        "rendered": "<p>Zapewne cz\u0119\u015b\u0107 z Was zastanawia si\u0119 w jaki spos\u00f3b na widgetach pojawiaj\u0105 si\u0119 r\u00f3\u017cne warto\u015bci pomiarowe &#8211; napi\u0119cie, pr\u0119dko\u015b\u0107, ilo\u015b\u0107 paliwa. Sk\u0105d pobierane s\u0105 te informacje? Najbardziej intuicyjnym podej\u015bciem wydaje si\u0119 by\u0107 odpytanie z poziomu samego widgetu odpowiedniego kana\u0142u diagnostyki lub czujnika. Je\u017celi spojrzymy w kod \u017ar\u00f3d\u0142owy podobnych system\u00f3w dost\u0119pnych w sieci, oka\u017ce si\u0119, \u017ce [&hellip;]<\/p>",
        "protected": false
    },
    "author": 1,
    "featured_media": 714,
    "comment_status": "closed",
    "ping_status": "open",
    "sticky": false,
    "template": "",
    "format": "standard",
    "meta": {
        "footnotes": ""
    },
    "categories": [
        3
    ],
    "tags": [],
    "class_list": {
        "0": "post-638",
        "1": "post",
        "2": "type-post",
        "3": "status-publish",
        "4": "format-standard",
        "5": "has-post-thumbnail",
        "6": "hentry",
        "7": "category-stodni",
        "9": "post-with-thumbnail",
        "10": "post-with-thumbnail-large"
    },
    "_links": {
        "self": [
            {
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/posts\/638",
                "targetHints": {
                    "allow": [
                        "GET"
                    ]
                }
            }
        ],
        "collection": [
            {
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/posts"
            }
        ],
        "about": [
            {
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/types\/post"
            }
        ],
        "author": [
            {
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/users\/1"
            }
        ],
        "replies": [
            {
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/comments?post=638"
            }
        ],
        "version-history": [
            {
                "count": 6,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/posts\/638\/revisions"
            }
        ],
        "predecessor-version": [
            {
                "id": 716,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/posts\/638\/revisions\/716"
            }
        ],
        "wp:featuredmedia": [
            {
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/media\/714"
            }
        ],
        "wp:attachment": [
            {
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/media?parent=638"
            }
        ],
        "wp:term": [
            {
                "taxonomy": "category",
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/categories?post=638"
            },
            {
                "taxonomy": "post_tag",
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/tags?post=638"
            }
        ],
        "curies": [
            {
                "name": "wp",
                "href": "https:\/\/api.w.org\/{rel}",
                "templated": true
            }
        ]
    }
}