Люди создают правила этикета, чтобы регламентировать взаимодействия между собой. Один из примеров — то, как мы разговариваем друг с другом по телефону. Представьте, что вы болтаете с подругой. Пока она говорит, вы знаете, что нужно молчать. Если она задаёт вопрос, а затем молчит, вы знаете, что она ждёт ответа и теперь ваша очередь говорить [3].
Компьютеры придерживаются аналогичного этикета, хотя и называется он термином «протокол». Компьютерный протокол — это принятый набор правил, которые определяют, как два компьютера могут общаться друг с другом. Однако по сравнению с нашими стандартами компьютерный протокол чрезвычайно строгий. Подумайте на минуту о двух предложениях: «Мой любимый цвет — синий» и «Синий — мой любимый цвет». Люди могут определить каждое предложение и понять, что они означают одно и то же, несмотря на то, что слова расположены в разном порядке. К сожалению, компьютеры не настолько умны.
Чтобы два компьютера могли эффективно взаимодействовать, сервер должен точно знать, как клиент будет структурировать свои сообщения. Представьте, что сервер — это человек, который просит почтовый адрес. Когда вы спрашиваете как определить место назначения, вы предполагаете, что первое, что вам скажут — это город, за которым следуют почтовый индекс, улица, и, наконец, дом. У вас также есть определенные ожидания в отношении каждой части адреса, например, тот факт, что почтовый индекс должен состоять только из цифр. Похожий уровень точности нужен и для правильной работы компьютерного протокола.
Протокол интернета
В мире технологий практически для всего существует протокол, и каждый из них заточен для выполнения своих задач. Возможно, вы уже слышали о некоторых из них: Bluetooth для подключения устройств и POP или IMAP для получения электронной почты.
В интернете основным протоколом является протокол передачи гипертекста, более известный под аббревиатурой HTTP (HyperText Transfer Protocol, протокол передачи гипертекста). Когда вы вводите адрес вроде http://example.com в веб-браузере, «http» указывает браузеру использовать правила HTTP-протокола при разговоре с сервером.
С повсеместным распространением HTTP в интернете многие компании предпочитают адаптировать его для использования в качестве протокола, лежащего в основе своих API-интерфейсов. Одним из преимуществ использования этого протокола является то, что он прост в изучении разработчиками. Еще одним преимуществом является то, что HTTP имеет несколько свойств, полезных для создания хорошего API, которые мы увидим позже. А сейчас давайте нырнём глубже и посмотрим, как работает HTTP.
HTTP-запросы
Взаимодействие в HTTP основано на концепции, называемой Циклом «Запрос-Ответ» (рис. 3.1). Клиент отправляет серверу запрос на выполнение каких-либо действий. Сервер, в свою очередь, отправляет клиенту ответ, в котором говорит, может ли он сделать то, что просил клиент.
Рисунок 3.1 – Цикл Запрос-Ответ
Чтобы сделать правильный запрос, клиент должен указать четыре вещи:
- URL (Uniform Resource Locator, единый указатель ресурсов)
- Метод (Method)
- Список Заголовков (Headers)
- Тело (Body)
Может показаться, что тут слишком много всего чтобы просто передать сообщение, но помните, что компьютеры должны быть очень точными, чтобы общаться друг с другом.
URL-адрес
URL-адреса знакомы нам в повседневном использовании интернета, но задумывались ли вы когда-нибудь об их структуре? В HTTP URL — это уникальный адрес какого-либо объекта. Каким объектам давать адреса — полностью решает организация, которая управляет сервером. Компании могут создавать URL-адреса для веб-страниц, изображений или даже видео с котиками.
API развивают эту идею, добавляя в контекст URL такие объекты, как, например, клиенты, продукты и твиты. В результате URL-адреса становятся для клиента простым способом сообщить серверу, с каким объектом он хочет взаимодействовать. Конечно, API не называют их «объектами», им дают техническое название «ресурсы».
Метод (method)
Метод запроса сообщает серверу, какое действие клиент хочет, чтобы сервер предпринял. Фактически, метод обычно называют «глаголом» запроса.
В API-интерфейсах чаще всего встречаются четыре метода:
GET — просит сервер получить ресурс;
POST — просит сервер создать новый ресурс;
PUT — просит сервер отредактировать/обновить существующий ресурс;
DELETE — просит сервер удалить ресурс.
Вот пример, который поможет проиллюстрировать эти методы. Допустим, есть пиццерия с API, который можно использовать для размещения заказов. Вы размещаете заказ, отправляя POST-запрос на сервер ресторана с перечнем вашего заказа с просьбой создать вашу пиццу по этим ингридиентам (рис. 3.2). Однако после того как вы отправили запрос, вы понимаете, что выбрали неправильные ингредиенты, поэтому вы делаете запрос PUT, чтобы изменить его.
Ожидая своего заказа, вы делаете кучу запросов GET для проверки статуса. После часа ожидания вы решаете, что не готовы больше ждать, и делаете DELETE-запрос, чтобы отменить свой заказ.
Рисунок 3.2 – Запрос «Пицца»
Заголовки (Headers)
Заголовки предоставляют метаинформацию о запросе. Это простой список элементов, таких как время отправки запроса клиентом и размер тела запроса.
Помните, как вы заходили со своего смартфона на веб-сайт, специально отформатированный для мобильных устройств? Это стало возможным благодаря HTTP-заголовку под названием «User-Agent». Клиент использует этот заголовок, чтобы сообщить серверу, какой тип устройства вы используете, и если веб-сайт достаточно умён чтобы прочесть его, то в результате отправит вам данные в наиболее удобном для вашего типа устройства формате.
В целом существуют довольно много разных заголовков HTTP, с которыми имеют дело клиенты и серверы, но давайте рассмотрим их позже, в следующих главах.
Тело (Body)
В теле запроса содержатся данные, которые клиент хочет отправить серверу. Продолжая наш пример с заказом пиццы выше, тело — это место, где размещаются ингредиенты заказа.
Уникальной чертой тела является то, что клиент полностью контролирует эту часть запроса. В отличие от метода, URL-адреса или заголовков, где протокол HTTP требует жёсткой структуры, тело позволяет клиенту отправлять всё, что ему нужно.
Эти четыре части — URL, метод, заголовки и тело — составляют полный HTTP-запрос (рис. 3.3).
Рисунок 3.3 – Структура HTTP-запроса
HTTP-ответы
После того, как сервер получает запрос от клиента, он пытается выполнить запрос и отправить клиенту ответ. HTTP-ответы имеют очень похожую на запросы структуру. Основное отличие состоит в том, что вместо метода и URL-адреса ответ включает код состояния. А в остальном заголовки и тело ответа имеют тот же формат, что и запросы.
Коды состояний
Коды состояний — это трехзначные номера, каждый из которых подразумевает под собой уникальное значение состояния, обработанного сервером запроса. Если в API они используются корректно, эти три цифры могут сообщить очень много информации клиенту. Например, вы могли видеть эту страницу в период ваших интернет-странствий:
Код состояния, связанный с этим ответом — 404, что означает «Не найдено» (рис. 3.4). Всякий раз, когда клиент делает запрос на ресурс, который не существует, сервер отвечает кодом состояния 404, чтобы сообщить клиенту: «этот ресурс не существует, поэтому, пожалуйста, не запрашивайте его снова!».
Рисунок 3.4 – Веб-страница 404 по умолчанию
В протоколе HTTP есть множество других статусов, от 200 («успешно! этот запрос был выполнен») до 503 («наш веб-сайт/API в настоящее время не работает»). Мы изучим некоторые из них по мере их появления в следующих главах.
После того, как ответ доставлен клиенту, Цикл Запрос-Ответ завершается, и этот раунд связи завершается (рис. 3.5). Теперь клиент должен инициировать дальнейшее взаимодействие. Сервер не будет отправлять клиенту больше данных, пока он не получит новый запрос.
Рисунок 3.5 – Структура HTTP-ответа
Как API строятся на HTTP
Теперь вы понимаете, что HTTP поддерживает большое количество функциональных сочетаний, чтобы помочь клиенту и серверу общаться. Итак, как это помогает нам с API? Гибкость HTTP означает, что построенные на нём API могут предоставить клиентам большой бизнес-потенциал. Мы видели этот потенциал в приведённом выше примере заказа пиццы. Простое изменение метода запроса дало понять серверу, что нужно сделать: создать новый заказ или отменить существующий. Было легко превратить желаемый бизнес-результат в инструкцию, понятную серверу. Очень мощно, не так ли!
Эта универсальность протокола HTTP распространяется и на другие части запроса. Некоторые API требуют наличия определенного заголовка, в то время как другим требуется конкретная информация внутри тела запроса. Возможность использования API зависит от понимания того, как сделать правильный HTTP-запрос, чтобы получить нужный вам результат.
Заключение
Целью этого раздела было дать базовое понимание HTTP. Ключевой концепцией был Цикл Запрос-Ответ, который мы разделили на следующие части:
– Запрос — состоит из URL-адреса (http://…), метода (GET, POST, PUT, DELETE), списка заголовков (User-Agent…) и тела (данных).
– Ответ — состоит из кода состояния (200, 404…), списка заголовков и тела.
На протяжении оставшихся глав курса мы будем возвращаться к этим частям, по мере знакомства с тем, как API-интерфейсы реализуются на их основе, обеспечивая мощность и гибкость интеграции.
3.2 Форматы данных
HTTP является основой API-интерфейсов в интернете и что для их использования нам необходимо знать, как работает HTTP. В этом разделе мы исследуем, какие данные предоставляют API, как они форматируются и как HTTP делает это возможным.
Представление данных
При обмене данными с людьми возможности отображения информации ограничиваются только человеческой фантазией. Вспомните пиццерию из предыдущей главы — как она может оформить своё меню? Например, как текстовый список или маркированный список, может быть серией фотографий с подписями или только набором фотографий, на которые показывают посетители, чтобы оформить заказ.
Хорошо продуманный формат помогает целевой аудитории понимать информацию.
Тот же принцип применяется при обмене данными между компьютерами. Один компьютер должен поместить данные в формат, понятный для другого. Обычно это какой-то текстовый формат.
Наиболее распространёнными форматами, встречающимися в современных API, являются JSON (JavaScript Object Notation, нотация объектов JavaScript) и XML (Extensible Markup Language, расширяемый язык разметки).
JSON
Многие новые API-интерфейсы приняли JSON в качестве формата, потому что он построен на популярном языке программирования Javascript, который повсеместно используется в интернете и применим как на фронте, так и на бэкенде веб-приложения или сервиса. JSON — это очень простой формат, состоящий из двух частей: ключей (keys) и значений (values). Ключи представляют собой свойство, атрибут описываемого объекта. Заказ пиццы может быть объектом. У него есть атрибуты (ключи), такие как тип корочки, начинка и статус заказа. У этих атрибутов есть соответствующие значения (толстое тесто, пепперони и «доставляется»).
Посмотрим, как этот заказ пиццы может выглядеть в JSON (рис. 3.6).
Рисунок 3.6 – Формат данных JSON
В приведенном выше примере JSON ключевыми словами являются слова слева: начинка, корочка и статус (рис. 3.7). Они говорят нам, какие атрибуты содержит заказ пиццы. Значения указаны в частях справа. Это фактические детали заказа.
Рисунок 3.7 – Ключ и значение JSON
Если вы прочитаете строку слева направо, вы получите довольно естественное английское предложение. Взяв, к примеру, первую строчку, мы могли бы прочитать её как «корочка для этой пиццы оригинального стиля». Вторая строка также может быть прочитана — в JSON значение, которое начинается и заканчивается квадратными скобками ([ ]), представляет собой список значений. Итак, мы читаем вторую строку заказа как «начинки для этого заказа: сыр, пепперони и чеснок».
Иногда вы хотите использовать объект в качестве значения для ключа. Давайте расширим наш заказ пиццы подробностями о клиенте, чтобы вы могли увидеть, как это может выглядеть (рис. 3.8).
Рисунок 3.8 – Результат формата данных JSON
В этой обновленной версии мы видим, что добавлен новый ключ «клиент». Значение этого ключа — это еще один набор ключей и значений, которые предоставляют подробную информацию о клиенте, разместившем заказ. Классный трюк, а?! Это называется Ассоциативным Массивом. Но не пугайтесь технического языка, ведь ассоциативный массив — это просто вложенный объект.
JSON
JSON (JavaScript Object Notation) – один из самых популярных и широко распространенных форматов обмена данными, первоначально описанных Дугласом Крокфордом [4].
В настоящее время он описывается двумя конкурирующими стандартами: RFC 71592 и ECMA-404. Стандарт ECMA минимален, описывая только разрешенный синтаксис грамматики, тогда как RFC также предоставляет некоторые семантические и соображения безопасности.
- JSON широко распространен в программном обеспечении, которое включает в себя архитектуру клиент-сервер для обмена данными между клиентом и сервером.
- JSON прост в использовании и имеет чисто текстовый, легкий и удобный для чтения формат, и люди часто неправильно понимают как замену XML.
- Хотя аббревиатура начинается с JavaScript, JSON не является языком или имеет какие-либо языковые литералы, это просто спецификация для обозначения данных.
- Это независимая от платформы и языка и встроенная поддержка практически всех языков / фреймворков первой линии, таких как поддержка формата данных JSON, доступна на всех популярных языках, некоторые из которых являются C #, PHP, Java, C ++, Python, Ruby и многое другое.
- Официальным типом интернет-медиа для JSON является application / json.
- Расширение имени файла JSON является .json.
Правила синтаксиса JSON
Синтаксис JSON (JavaScript Object Notation) основан на подмножестве JavaScript (см. Также json.org ).
Действительным выражением JSON может быть один из следующих типов данных:
– простые типы данных: String, Number, Boolean, Null;
– составные типы данных: значение, объект, массив.
Композитные типы данных
Значение JSON может быть одним из следующих: String, Number, Boolean, Null, Object, Array.
Объект JSON является разделенным запятыми неупорядоченным набором пар name: value, заключенных в фигурные скобки, где name – это String и значение JSON.
Массив JSON Array – упорядоченная коллекция значений JSON.
Пример массива JSON (рис. 3.9).
Рисунок 3.9 – Пример массива JSON
Примеры объектов JSON (рис. 3.10).
Рисунок 3.10 – Примеры объектов JSON
Онлайн-инструменты для проверки и форматирования данных JSON:
http://www.freeformatter.com/json-validator.html
Объект JSON окружен фигурными фигурными скобками и содержит пары ключ-значение (рис. 3.11).
Рисунок 3.11 – Объект JSON
Чтобы суммировать все это, это пример действительного объекта JSON (рис. 3.12).
Рисунок 3.12 – Пример действительного объекта JSON
XML
XML существует с 1996 года. С возрастом он стал очень зрелым и мощным форматом данных. Как и JSON, XML предоставляет несколько простых строительных блоков, которые создатели API используют для структурирования своих данных. Основной блок называется узлом (node) [3].
Давайте посмотрим, как может выглядеть наш заказ пиццы в XML (рис. 3.13).
Рисунок 3.13 – Фрагмет в формет XML
XML всегда начинается с корневого узла, которым в нашем примере с пиццей является «заказ». Внутри заказа находятся ещё несколько «дочерних» узлов (рис. 3.14). Имя каждого узла сообщает нам атрибут заказа (как и ключ в JSON), а данные внутри представляют собой фактические детали (как и значение в JSON).
Рисунок 3.14 – Узел и значение в XML
Вы также можете вывести предложения на английском языке, читая XML. Глядя на строчку с «корочкой», мы могли прочитать «корочка для пиццы оригинального стиля». Обратите внимание, как в XML каждый элемент в списке начинок обернут узлом. Как видите, формат XML требует гораздо больше текста для передачи, чем JSON.
Как форматы данных используются в HTTP
Теперь, когда мы изучили некоторые доступные форматы данных, нам нужно знать, как использовать их в HTTP. Для этого мы ещё раз поприветствуем одну из основ HTTP: заголовки (рис. 3.15). В главе 2 мы узнали, что заголовки — это список информации о запросе или ответе. Есть заголовок, указывающий, в каком формате находятся данные: Content-Type .
Когда клиент отправляет заголовок Content-Type в запросе, он сообщает серверу, что данные в теле запроса отформатированы определённым способом. Если клиент хочет отправить серверу данные в формате JSON, он установит Content-Type на «application/json». Получив запрос и увидев этот Content-Type, сервер сначала проверит, понимает ли он этот формат, и, если да, он будет знать, как читать данные. Аналогичным образом, когда сервер отправляет клиенту ответ, он также устанавливает Content-Type, чтобы сообщить клиенту, как читать тело ответа.
Иногда клиент может общаться только в одном формате данных. Если сервер отправляет обратно что-либо, кроме этого формата, клиент откажется и выдаст ошибку. К счастью, на помощь приходит второй HTTP-заголовок. Клиент может установить заголовок Accept, чтобы сообщить серверу, какие форматы данных он может принимать. Если клиент может общаться только в формате JSON, он может установить для заголовка Accept значение «application/json». И тогда сервер будет отправлять ответы в формате JSON. Если сервер не поддерживает формат, запрашиваемый клиентом, он может отправить клиенту сообщение об ошибке, чтобы сообщить ему, что запрос не будет работать.
С помощью этих двух заголовков, Content-Type и Accept, клиент и сервер могут работать с форматами данных, которые они понимают и должны работать должным образом.
Рисунок 3.15 – Заголовки форматов данных
Заключение
В этом разделе мы узнали, что для того, чтобы два компьютера могли общаться, они должны понимать передаваемый им формат данных. Мы познакомились с двумя распространенными форматами данных, используемыми в API: JSON и XML. Мы также узнали, что HTTP-заголовок Content-Type — это полезный способ указать, какой формат данных отправляется в запросе, а заголовок Accept определяет запрошенный формат для ответа [4].
Ключевые термины, которые мы узнали, были:
- JSON: нотация объектов JavaScript;
- Объект: вещь или существительное (человек, заказ пиццы …);
- Ключ: атрибут объекта (цвет, начинка …);
- Значение: значение атрибута (синий, пепперони …);
- Ассоциативный массив: вложенный объект;
- XML: расширяемый язык разметки.
CSV
CSV (от англ. Comma-Separated Values — значения, разделённые запятыми) — текстовый формат, предназначенный для представления табличных данных. Строка таблицы соответствует строке текста, которая содержит одно или несколько полей, разделенных запятыми (рис. 3.16) [5].
Формат CSV стандартизирован не полностью. Идея использовать запятые для разделения полей очевидна, но при таком подходе возникают проблемы, если исходные табличные данные содержат запятые или переводы строк. Возможным решением проблемы запятых и переносов строк является заключение данных в кавычки, однако исходные данные могут содержать кавычки. Помимо этого термином «CSV» могут обозначаться похожие форматы, в которых разделителем является символ табуляции (TSV) или точка с запятой. Многие приложения, которые работают с форматом CSV, позволяют выбирать символ разделителя и символ кавычек.
Рисунок 3.16 – Формат данных CSV
Спецификация
Каждая строка файла — это одна строка таблицы.
Разделителем (англ. delimiter) значений колонок является символ запятой (,). Однако на практике часто используются другие разделители, то есть формат путают с DSV [англ.] и TSV (см. ниже).
Значения, содержащие зарезервированные символы (двойная кавычка, запятая, точка с запятой, новая строка) обрамляются двойными кавычками (“). Если в значении встречаются кавычки — они представляются в файле в виде двух кавычек подряд.
Стандартизация
Название формата — CSV (значения, разделённые запятыми) — указывает что для разделения полей используется запятая. Тем не менее термин «CSV» может использоваться для обозначения схожих форматов. Много программ понимают под CSV более общий формат DSV [англ.] (англ. delimiter-separated values — значения разделённые разделителем), допускающий использование иных символов в качестве разделителя. В частности, в русской и других локалях запятая по умолчанию зарезервирована под десятичный разделитель. Поэтому как разделитель используется точка с запятой или табуляция (формат TSV). Другие отличия родственных форматов: используемые кавычки (двойные или одинарные); используемый набор символов; использование первой строки как заголовка. Это значительно затрудняет перенос данных из одних программ в другие, несмотря на всю простоту реализации поддержки CSV.
Стандарт RFC 4180
Существует RFC 4180, предназначенный для стандартизации и упрощения обмена данными в формате CSV. Он предъявляет, в частности, такие требования:
- окончание строк в стиле MS-DOS, символы (CR / LF).
- необязательная строка заголовка.
- каждая строка (запись) должна содержать одинаковое количество полей.
- поле может быть заключено в двойные кавычки.
- если поле содержит запятые, переносы строк, двойные кавычки, то это поле должно быть заключено в двойные кавычки. Если этого не сделать, то данные невозможно будет корректно обработать.
- символ двойной кавычки в поле должен быть удвоен.
Вместе с тем стандарт не рекомендует быть слишком строгим при обработке CSV-данных, получаемых от сторонних источников.
Пример исходный текст (рис. 3.17).
Рисунок 3.17 – Пример исходный текст
Результирующая таблица (Рис. 3.18).
Рисунок 3.18 – Результирующая таблица
Для русифицированного Microsoft Excel (при разделителе 😉 исходный текст будет выглядеть так (рис. 3.19).
Рисунок 3.19 – Исходный текст для русифицированного Microsoft Excel
Рисунок 3.20 – Результирующая таблица
Программы для редактирования CSV-файлов
Формат файла CSV поддерживается практически всеми электронными таблицами и системами управления базами данных, включая LibreOffice Calc, Gnumeric, Emacs, Microsoft Excel, Numbers, ТаблицаПро, CSVed, KSpread, Google Docs.
Импорт и экспорт CSV-файлов возможен во многих инженерных пакетах, например, ANSYS и LabVIEW [5].
Ссылки
- CSV-1203 (English) (англ.)
- RFC 4180, спецификация (англ.)
- RFC 4180, спецификация (рус.)
- Примеры Архивная копия от 4 апреля 2021 на Wayback Machine
- Формальная спецификация на EBNF
Правила форматирования электронных таблиц CSV
Каждая строка в документе олицетворяет собой строку таблицы. Разделение между строками обозначается с использованием символов возврата каретки (CR, LF, CRLF или других в зависимости от кодировки файла) [6].
Все строки таблицы обязаны содержать одинаковое количество полей. При этом отмечается, что поле может содержать сколько угодно символов, включая пробелы.
В первой строке (на усмотрение автора) прописываются имена столбцов. Следует убедиться, что число полей в первой строке соответствует числу полей в остальной таблице.
Если поле не содержит данные, допускается обозначить его просто разделительными запятыми, без пробелов между ними.
Пробелы перед и после запятой-разделителя не отображаются в таблице и будут опущены.
Последнее поле документа не должно завершаться запятой. Здесь также можно выбрать, использовать или не использовать символ возврата каретки (переноса строки).
Любые данные внутри одной ячейки могут быть окружены двойными кавычками. Если же кавычки применяются не ко всему полю, вставлять их в текст внутри этого поля не рекомендуется.
При наличии в тексте ячейки двойных кавычек, запятых и символов возврата каретки, содержимое всей ячейки следует заключить в двойные кавычки.
Когда двойные кавычки присутствуют внутри текста ячейки, их следует экранировать при помощи еще одной пары двойных кавычек. Например, «начало »«выделенной фразы»« конец».
Некоторые авторы используют символ «/» для экранирования кавычек, однако это не является правильным подходом и может привести к некорректному отображению в большинстве программ.
Хотя формат CSV не определяет типы данных и не предоставляет средства для их обозначения, программа, в которой открывается файл, может интерпретировать их. Например, строковые данные, состоящие из цифр, могут быть восприняты как числа программой Microsoft Excel, что может повлиять на округление или удаление начальных нулей. Чтобы этого избежать, в документах, которые будут использоваться в Excel, перед числами, заключенными в кавычки, можно добавить знак «=».
Некоторые приложения могут не поддерживать форматирование с использованием двойных кавычек. Это следует учитывать при подготовке и экспорте документов.
При записи дробных чисел в формате CSV важно помнить, что разделитель десятичной части может различаться в зависимости от региональных настроек: в одних странах используется точка, в других — запятая.
Некоторые способы записи числовых данных могут быть восприняты программами как даты, валюты или формулы, что влияет на их тип и обработку. Эти аспекты также зависят от региональных настроек.
Если открыть файл CSV в Microsoft Excel, то откроется следующее (рис. 3.21).
Рисунок 3.21 – Файл CSV в Microsoft Excel
Если открыть в текстовом редакторе (рис. 3.22).
Рисунок 3.22 – Формат CSV в текством редакторе Notapad++
Чем открыть файл CSV
Это можно сделать с помощью программ, Android-приложений и онлайн-сервисов [6].
С помощью компьютерных программ и инструментов
Текстовые редакторы:
- Notepad (Windows);
- TextEdit (Mac);
- Visual Studio Code;
- Sublime Text.
Табличные программы:
- Microsoft Excel;
- Google Sheets;
- LibreOffice Calc;
- Numbers (Mac).
Специализированные инструменты:
- OpenRefine (для очистки и трансформации данных);
- R (с помощью функции read.csv());
- Python (с помощью библиотеки pandas);
- SQL базы данных (загрузка данных в таблицы).
На телефоне или планшете Android
- CSV File Viewer — только для чтения и конвертации файла в pdf.
- CSV Editor — для редактирования данных и структуры таблиц.
- Csv To Excel Converter — для конвертации файлов с расширением .CSV в документы XLSX.
- CSV Graph Tool — для построения графиков на основе данных из таблицы.
- Microsoft Excel — мобильная версия универсального табличного редактора.
Для выбора программы для открытия CSV щелкните на соответствующем приложении в списке. Это позволит вам использовать выбранное приложение для просмотра и редактирования данных в CSV-формате.
Если на вашем компьютере не установлено приложений, автоматически связанных с данным типом файлов, то вместо списка предложенных приложений вы увидите пустое место. В этом случае вам будет доступен вариант «Поиск в Microsoft Store» или «Выбрать другое приложение». Нажав на этот вариант, можно найти подходящее приложение через Магазин Microsoft или выбрать другое приложение для работы с CSV (рис. 3.23).
Рисунок 3.23 – Открытие CSV в Excel
Пошаговая инструкция по открытию CSV с помощью Microsoft Excel и преобразования файла в понятный табличный вид.
Открытие файла в Microsoft Excel
Найдите файл CSV на вашем компьютере. Кликните правой кнопкой мыши по файлу. В выпадающем меню выберите «Открыть с помощью» и затем Microsoft Excel (рис. 3.24).
Рисунок 3.24 – Открыть файл в формате csv
Форматирование файла
После открытия файл в Excel может быть представлен как набор данных без структуры. Чтобы упорядочить данные и перевести в табличный вид, выполните следующие шаги. Открытый файл в Excel (рис. 3.25).
Рисунок 3.25 – Открытый файл в Excel
Текст по столбцам
Выделите первый столбец (А) и перейдите на вкладку «Данные» в верхней части экрана. Выберите «Текст по столбцам» (рис .3.26).
Рисунок 3.26 – Открытый файл в Excel «Текст по столбцам»
Выбор разделителя
В появившемся окне выберите опцию «С разделителями» (рис .3.27). Нажмите «Далее».
Рисунок 3.27 – Выбор разделителя
Выбор формата разделителя
В этом окне выберите нужный формат разделителя. В данном случае это будет запятая.
Пример в нижней части окна демонстрирует, как будет выглядеть документ после преобразования.
Если разделителем является нестандартный символ, используйте опцию «Другой» и введите нужный символ (рис. 3.28).
Рисунок 3.28 – Выбор формата разделителя
Применение настроек и завершение форматирования
При необходимости можно изменить формат данных столбца. Нажимаем «Готово» (рис. 3.29).
Рисунок 3.29 – Применение настроек и завершение форматирования
Результат
Ваш CSV-файл будет преобразован в структурированный вид, разделенный на столбцы и строки (рис. 3.30).
Рисунок 3.30 – Структурированный вид, разделенный на столбцы и строки
Как создать и сохранить файл CSV
- Создание CSV-файла
Способ 1: Ручное создание в текстовом редакторе. Откройте текстовый редактор, например Notepad (Windows), TextEdit (Mac). Введите данные, разделяя поля запятыми и строки переносами. Сохраните файл с расширением *.csv.
Способ 2: Использование электронных таблиц. Откройте программу для работы с электронными таблицами, например Microsoft Excel, Google Sheets, LibreOffice Calc и другие. Введите данные в ячейки таблицы. Затем, когда вы готовы сохранить, выберите опцию «Сохранить как» и выберите формат CSV.
- Сохранение файла
При сохранении файла в формате CSV обязательно укажите расширение *.csv в имени файла, чтобы программа поняла, что это именно CSV-файл.
В некоторых программах вас могут попросить указать настройки кодировки при сохранении файла. Обычно выбирают кодировку UTF-8, так как она поддерживает разнообразные символы и языки.
Если вы работаете с программой Excel, при сохранении файла в формате CSV вас может предупредить о потере некоторых форматирований. Например, формулы могут быть преобразованы в значения.
После сохранения вы можете открыть получившийся файл CSV в любой поддерживающей его программе, чтобы убедиться, что данные отображаются корректно.
Заключение
Файл формата CSV представляет собой структурированный текст, организованный в виде таблицы. Это позволяет открывать его с использованием большинства универсальных текстовых и табличных редакторов.
Основное различие между форматом CSV и аналогичными форматами заключается в символе-разделителе полей таблицы. В случае CSV этим разделителем является запятая.
Для того чтобы документ сохранил желаемую структуру, необходимо строго соблюдать правила форматирования. Нарушение этих правил может привести к тому, что документ сохранится, но данные в нем будут искажены.
Некоторые приложения могут автоматически преобразовывать типы данных в таблицах CSV в соответствии со своими настройками. Чтобы избежать такого преобразования, рекомендуется использовать функцию импорта и внимательно проверять параметры перед загрузкой файла.
Выбор подходящей программы для открытия CSV-документа зависит от того, каким образом вы собираетесь работать с файлом. Если вам нужно внести небольшие правки в текст, будет достаточно простого текстового редактора, например блокнота. Если требуется более глубокая работа с структурой таблицы, лучше выбрать программы вроде Excel или аналогичных. В них документ отображается в том виде, в котором он был создан и отформатирован, что упрощает обнаружение и коррекцию возможных ошибок.
YAML
YAML (рекурсивный акроним англ. «YAML Ain’t Markup Language» — «YAML — не язык разметки») — дружественный формат сериализации данных, концептуально близкий к языкам разметки, но ориентированный на удобство ввода-вывода типичных структур данных многих языков программирования [7].
В трактовке названия отражена история развития: на ранних этапах YAML расшифровывался как yet another markup language («ещё один язык разметки») и даже позиционировался как конкурент XML, но позже был переименован с целью акцентировать внимание на данных, а не на разметке документов [8].
Цели создания
Согласно целям, озвученным Кларком Эвансом (англ. Clark Evans), YAML 1.0 призван [9]:
- быть понятным человеку;
- быть переносимым между языками программирования;
- поддерживать структуры данных, родственные для языков программирования;
- использовать цельную модель данных для поддержки обычного инструментария;
- поддерживает обработку за один проход;
- быть выразительным и расширяемым;
- быть лёгким в реализации и использовании.
Синтаксис
Синтаксис YAML минималистичен, особенно по сравнению с синтаксисом XML. В спецификации указано, что большое влияние на YAML оказал стандарт RFC 822. Ниже приведены образцы различных компонентов разметки. Следует заметить, что наличие варианта записи в однострочном формате делает JSON допустимым подмножеством YAML.
Последовательности (списки) (рис. 3.31).
Рисунок 3.31 – Последовательности (списки)
Сопоставления имени и значения (словари) (рис. 3.32).
Рисунок 3.32 – Последовательности (списки)
Строковые данные. Переводы строк сохраняются (рис. 3.33).
Рисунок 3.33 – Строковые данные
Переводы строк исчезают (рис. 3.34).
Рисунок 3.34 – Переводы строк
Последовательности из сопоставлений (рис 3.35).
Рисунок 3.35 – Последовательности из сопоставлений
Сопоставления из последовательностей (рис. 3.36).
Рисунок 3.36 – Сопоставления из последовательностей
Основные элементы YAML:
- потоки YAML используют печатаемые Unicode-символы, как UTF-8, так и UTF-16;
- отступы из пробелов (символы табуляции не допускаются) используются для обозначения структуры;
- комментарии начинаются с символа «решётки» (#), могут начинаться в любом месте строки и продолжаются до конца строки;
- списки обозначаются начальным дефисом (-) с одним членом списка на строку, либо члены списка заключаются в квадратные скобки ([ ]) и разделяются запятой и пробелом (, );
- ассоциативные массивы представлены двоеточием с пробелом (: ) в виде ключ: значение, по одной паре ключ-значение на строку, либо в виде пар, заключённых в фигурные скобки и разделенных запятой и пробелом (, );
- ключ в ассоциативном массиве может иметь в качестве префикса вопросительный знак (?), что позволяет указать сложный ключ, например представленный в виде списка;
- строки записываются без кавычек, однако могут быть заключены в одиночные или двойные кавычки;
- внутри двойных кавычек могут быть использованы экранированные символы в C-стиле, начинающиеся с обратной косой ();
- YAML позволяет задавать подстановки с помощью якорей & и псевдонимов (*);
- явное задание типа оформляется путём ‘!![указание типа]’. Пример, !!str 100 после разбора выдаст строковое значение «100» вместо целого числа 100;
- значения типа Дата/Время задаются в формате YYYY-MM-DD или YYYY-MM-DD HH:MM:SS. Если необходимо задать дату как строку, нужно заключать её в кавычки («2012-12-21»).
Пример, последовательность настроек (рис. 3.37).
Рисунок 3.37 – Пример, последовательность настроек
Пример.
В некотором проекте нужно хранить конфигурацию[англ.], описывающую отображение (англ. bindings) IRC-команд на функции, с помощью регулярных выражений.
Вот исходная конфигурация, представленная в виде таблицы (рис. 3.38)
Рисунок 3.38 – Исходная конфигурация
В YAML эта конфигурация может быть представлена следующим образом (рис. 3.39-3.40).
Рисунок 3.39 – Конфигурация в YAML
или
Рисунок 3.40 – Конфигурация в YAML
Для сравнения, в XML-представлении данная конфигурация может быть представлена следующим образом (рис. 3.41-3.42).
Рисунок 3.41 – Конфигурация в XML
или
Рисунок 3.42 – Конфигурация в XML
В совместимом JSON можно выразить это так (рис. 3.43).
Рисунок 3.43 – Конфигурация в JSON
Вложенные XML-элементы могут использоваться для отображения произвольных структур, а YAML более близок к отображению типичных моделей данных из Ruby, Perl, Python, Java, позволяя описывать свободные сочетания последовательностей, сопоставлений и скалярных типов — то есть ближе к реальным структурам данных языков программирования, и не требует различных соглашений про DOM-отображения структур данных на документы и обратно, как требуется в XML.
Использование
Среди программных систем, использующих YAML как формат для файлов конфигурации, — Ruby on Rails, Docker Compose, Kubernetes (притом поддерживается взаимно-однозначное соответствие с форматом JSON), Dancer, Symfony, GAE framework, Google App Engine, Dart, Home Assistant.
Ссылки
YAML.ORG (англ.). — официальный сайт. Дата обращения: 29 ноября 2010. Архивировано 10 февраля 2012 года.
YAML. CustisWiki. Заказные ИнформСистемы. Дата обращения: 29 апреля 2006. Архивировано 10 февраля 2012 года.
YAML Validator (англ.). — Валидатор YAML.
Название YAML означает, что YAML Не является языком разметки. Если это немедленно отдаляет XML, это не говорит нам, что такое YAML. YAML – это, согласно его спецификации , язык сериализации данных, разработанный для чтения человеком и хорошо работающий с современными языками программирования для повседневных задач [10].
В частности, мы могли бы отметить следующий список ингредиентов для завтрака (рис. 3.44).
Рисунок 3.44 – Список ингредиентов для завтрака в формате YAML
Это допустимый файл YAML, который представляет собой список строк. Чтобы убедиться, мы можем написать следующий скрипт Python, который анализирует файл, имя которого передается в командной строке, и отображает результат:
Рисунок 3.45 – Скрипт Python
Этот скрипт выдаст следующий результат (рис. 3.46).
Рисунок 3.46 – Результат Скрипт Python
Это означает, что результатом этого синтаксического анализа является список Python, содержащий соответствующие строки! Таким образом, анализатор способен отображать естественные структуры данных языка, используемого для синтаксического анализа.
Теперь давайте запишем обратный отсчет (рис. 3.47).
Рисунок 3.47 – Обратный отсчет
Мы получаем следующий результат (рис. 3.48).
Рисунок 3.48 – Результат
Это всегда список, но анализатор распознал каждый элемент как целое число, а не как простую строку как в предыдущем примере. Таким образом, анализатор способен различать такие типы данных, как строки и целые числа, числа с плавающей запятой и даты. Для этого мы используем естественный синтаксис: 3 распознается как целое число, а возрастающее – нет, потому что целое число не может быть преобразовано в целое число, число с плавающей точкой или любой другой тип, распознаваемый YAML. Чтобы заставить YAML интерпретировать 3 как строку, вы можете заключить ее в кавычки.
YAML также может распознавать ассоциативные массивы, поэтому мы могли бы отметить заказ на завтрак следующим образом (рис. 3.49).
Рисунок 3.49 – Ассоциативные массивы
Который будет загружен следующим образом (рис. 3.50).
Рисунок 3.50 – Результат загрузки кода
INI
ini-файл (англ. Initialization file) — файл конфигурации[англ.], который содержит данные настроек для Microsoft Windows, Windows NT и некоторых приложений [11].
Появились с самых первых версий Windows. В версии Windows 1.01 это был только файл WIN.INI. В Windows 3.0 добавился файл SYSTEM.INI. А затем их количество начало расти быстро и бесконтрольно.
Не существует подробной официальной спецификации формата. Начиная с Windows 95, INI файлы считаются устаревшими и в качестве замены им Microsoft предлагает использовать системный реестр (Registry). Тем не менее INI файлы продолжают использоваться как приложениями других производителей, так и компонентами ОС от Microsoft. Например, файл boot.ini используется в Windows NT4/2000/XP при загрузке для выбора из нескольких ОС.
Хотя INI файлы и приобрели популярность в Windows, они могут использоваться в любой ОС. Несложная структура этого формата позволяет легко обрабатывать их программно и имеет достаточно понятный вид для чтения и изменения человеком. Существуют текстовые редакторы (например, SciTE или Notepad++), которые используют подсветку синтаксиса и фолдинг для этого формата, что облегчает редактирование INI файлов вручную.
Использование секций для разделения параметров способствует систематизации данных, однако для хранения настроек большого объёма с более сложной иерархической структурой лучше подходит формат XML или JSON.
Формат файла
Ini-файлы — это обычные текстовые файлы, которые можно редактировать и просматривать при помощи любого текстового редактора. ini-файлы имеют следующий формат (рис. 3.51).
Рисунок 3.51 – Текстовые файлы ini
INI файл может содержать:
- пустые строки;
- комментарии — от символа «;» (точка с запятой), стоящего в начале строки, до конца строки;
- заголовки разделов — строки, состоящие из названия раздела, заключённого в квадратные скобки «[ ]»;
- значения параметров — строки вида «ключ=значение».
Соглашения
Не существует общепринятого стандарта формата файлов INI. Хотя общая структура таких файлов обычно сохраняется, многие программные продукты вводят в неё дополнительные возможности или, наоборот, ограничения.
- Комментарии. Некоторые приложения (например, Samba) считают символом начала комментария как «;», так и «#».
- Обратный слэш. Иногда допускается использование обратного слэша «» для объявления следующей строки продолжением этой. В таком случае они будут обработаны как одна целая строка. Иногда возможно также применять «» для ввода спецсимволов, например, ‘n’ для обозначения переноса строки.
- Одинаковые параметры. В большинстве случаев наличие двух одинаковых ключей в одной секции запрещено (при этом в Windows обрабатывается только первый, а во многих других реализациях — последний ключ).
- Одинаковые имена секций. Обычно при наличии нескольких секций с одинаковыми именами в файле обрабатывается лишь первая (в реализации Windows) или последняя из них. Некоторые приложения объединяют содержимое всех таких секций в одну.
- Кавычки. Если значение взято в двойные или одинарные кавычки, функция чтения файлов INI в Windows убирает их. Убирается только внешняя пара кавычек. При этом функция записи в INI игнорирует эту особенность.
Примеры
Пример содержимого файла desktop.ini (рис. 3.52).
Рисунок 3.52 – Пример содержимого файла desktop.ini
При этом папка, в которой находится desktop.ini, должна иметь атрибут только чтение (команда attrib +r «имя папки») или системный (attrib +s «имя папки»); только тогда в ней корректно будут отображаться все настройки [11].
Список литературы
- Бойченко А.В., Кондратьев В.К., Филинов Е.Н. Основы открытых информационных систем. 2-е издание, переработанное и дополненное. Под ред. Кондратьева В.К. //Издательский центр АНО «ЕОАИ». – М.:, 2004. – 128 с.
- Interaction Components Between Components based on a Middleware Văn Cam Pha.m, Önder Gürcan, Ansgar Radermacher CEA, LIST, Laboratory of Model driven engineering for embedded systems, Point Courrier 174, Gif-sur-Yvette, F-91191 France name.surname@cea.fr
URL: https://ceur-ws.org/Vol-1281/4.pdf
Дата 28.07.2024 г
- Школа системного анализа и проектирования
URL: https://systems.education/api-2-protocols
(Дата обращения 29.07.2024)
- JSON учебник.
(Дата обращения 29.07.2024)
- Википедия. Свободная энциклопедия. CSV
URL: https://ru.wikipedia.org/wiki/CSV
- Skillfactory Media. Словарь IT. CSV
URL: https://blog.skillfactory.ru/glossary/csv-format/
- Википедия. Свободная энциклопедия. YAML
URL: https://ru.wikipedia.org/wiki/YAML
- Stack overflow. If YAML ain’t markup language, what is it?(англ.). (6 августа 2011). (Дата обращения: 15 марта 2021). Архивировано 23 апреля 2021 года.
URL: https://stackoverflow.com/questions/6968366/if-yaml-aint-markup-language-what-is-it
- Oren Ben-Kiki, Clark Evans, Brian Ingerson.YAML Ain’t Markup Language (YAML™) 1.0 (англ.) (29 января 2004). Дата обращения: 15 марта 2021. Архивировано 6 мая 2021 года.
URL: https://yaml.org/spec/1.0/
- Introduction to YAML. Michel Casabianca
URL: https://sweetohm.net/pdf/introduction-yaml.en.pdf
- Википедия INI
URL: https://ru.wikipedia.org/wiki/.ini