
Я люблю HTML. Я люблю это больше всего на свете во фронтенд-разработке. Это просто, это полностью декларативно, это мощно и, самое главное, это основа любого веб-приложения. Вы можете делать все, что хотите, с рендерингом на стороне сервера или магией JavaScript на периферии, но в конечном итоге пользователь всегда видит HTML и взаимодействует с ним.
В HTML есть разные элементы, отвечающие за представление разных ресурсов, например <img>, <a>, <script>, <link>. Некоторые из них извлекают некоторые ресурсы или данные с сервера, в то время как другие могут просто указывать или ссылаться на некоторые ресурсы.
Например, с помощью <img> вы можете загружать изображения и представлять их пользователю:
<img src="/../../path/to/image.png">
Я всегда чувствовал, что мы можем сделать то же самое для более сложных типов ресурсов, таких как, например, JSON. Довольно часто нам просто нужно получить некоторые данные в формате JSON и сопоставить их с некоторым шаблоном HTML. Вы можете добиться этого, извлекая данные с помощью AJAX в JavaScript и создавая элементы с сопоставленными данными из ответа. Или вы можете использовать серверный рендеринг, который объединяет и генерирует HTML с сопоставленными данными.
Представьте, что у вас нет контроля над сервером, например, когда вам нужно получить данные из стороннего сервиса или внешнего API. В таких случаях вы можете не захотеть создавать прокси на своем сервере или привносить в свой проект интерфейсный фреймворк с десятками зависимостей. Кроме того, повторное написание одних и тех же запросов AJAX в JavaScript может быть утомительным.
Дело не в том, что я против рендеринга на стороне сервера или JavaScript (который, на мой взгляд, является лучшим языком сценариев). Скорее, я считаю, что мы должны стремиться к простоте. HTML — отличный способ добиться этой простоты.
В качестве примера рассмотрим открытый API, такой как restcountries.com. Если мы сделаем запрос на этот URL — https://restcountries.com/v3.1/name/cyprus — мы получим ответ в формате JSON:
[
{
"name":{
"common":"Cyprus",
"official":"Republic of Cyprus",
"nativeName":{
"ell":{
"official":"Δημοκρατία της Κύπρος",
"common":"Κύπρος"
},
"tur":{
"official":"Kıbrıs Cumhuriyeti",
"common":"Kıbrıs"
}
}
},
"currencies":{
"EUR":{
"name":"Euro",
"symbol":"€"
}
},
...
"capital":[
"Nicosia"
],
"region":"Europe",
"subregion":"Southern Europe",
"languages":{
"ell":"Greek",
"tur":"Turkish"
},
"population":1207361,
"timezones":[
"UTC+02:00"
],
"continents":[
"Europe"
],
"flags":{
"png":"https://flagcdn.com/w320/cy.png",
"svg":"https://flagcdn.com/cy.svg",
"alt":"The flag of Cyprus has a white field, at the center of which is a copper-colored silhouette of the Island of Cyprus above two green olive branches crossed at the stem."
}
}
]
Представьте, если бы мы могли сделать что-то вроде этого:
<template is="e-json" data-src="https://restcountries.com/v3.1/name/cyprus" data-object-name="response">
<h3>Information about <span data-text="${response.body[0].name.official}:"></span></h3>
<p>
<span>Capital is </span><b data-text="${response.body[0].capital[0]}"></b><br>
<span>Localted in </span><b data-text="${response.body[0].continents[0]}"></b><br>
<span>Localted more specifically in </span><b data-text="${response.body[0].subregion}"></b><br>
<span>Flag looks like </span><img class="flag" src="${response.body[0].flags.svg}"><br>
<span>Timezones are </span><b data-text="${response.body[0].timezones.join(', ')}"></b><br>
<span>Population is </span><b data-text="${response.body[0].population}"></b><br>
<span>Languages are </span><b data-text="${Object.values(response.body[0].languages).join(', ')}"></b><br>
<span>Currencies are </span><b data-text="${Object.keys(response.body[0].currencies).join(', ')}"></b><br>
</p>
</template>
С небольшим количеством CSS страница может выглядеть так:

У меня для вас хорошие новости — вы можете это сделать, и не только. EHTML предоставляет настраиваемые элементы, которые вы можете поместить на HTML-страницу для различных целей и вариантов использования. Основная идея и цель этой библиотеки — предоставить удобный способ избавиться от кода JavaScript на стороне клиента, насколько это возможно для базовых и рутинных вещей.
Как видите, просто объявив тег template с индикатором e-json и некоторыми атрибутами, где вы указываете источник JSON и имя объекта отображения, вы можете вытащить JSON и отобразить его внутри шаблона через атрибут data-text, где вы также можете применять функции для структур данных. . EHTML также позволяет зацикливать объекты, ставить условия и многое другое.
Источник: https://guseyn.com/html/posts/fetch-json-with-ehtml.html
Рекомендации