Разбор слова по составу развивающий: Словарь синонимов sinonim.org

Содержание

Умные многоразовые карточки. Разбор слова по составу

Умные многоразовые карточки. Разбор слова по составу
  • Описание
  • Характеристики
  • Отзывы (0)

ISBN: 460-3-727-56398-6
Автор: Стронская И.М.
Издательство: Литера
Год издания: 2018

В серии «Умные многоразовые карточки» представлены учебные пособия для тренировки умений и навыков, которые школьники с 1 по 4 классы получают на уроках. Каждое из пособий предлагает ученикам отработать самые трудные темы по русскому языку, математике и английскому языку. Специальное покрытие карточек и волшебный фломастер позволяют писать и стирать написанное столько раз, сколько потребуется.

ISBN: 460-3-727-56398-6
Год Выпуска: 2018
Автор: Стронская И. М.
Издательство: Литера
Размер: 200х140 мм
Страниц: 16

Пока нет отзывов

Оставить отзыв

Все поля обязательны к заполнению

Перед публикацией отзывы проходят модерацию

Доставка почтой

  • Не доставляется почтой (2)

Формат

  • 60х84 1/16 (1)
  • 70х100 1/16 (4)
  • 70х108 1/16 (1)
  • 70х90 1/16 (4)
  • 84х100 1/16 (1)
  • 84х108 1/16 (1)
  • 84х108 1/32 (1)
  • 84х60 1/16 (3)

Год Выпуска

  • 2014 (2)
  • 2015 (1)
  • 2016 (16)
  • 2017 (3)
  • 2018 (11)
  • 2019 (5)
  • 2020 (4)

Автор

  • Векшина Т. В.,Алимпиева М.Н. (3)
  • Крутецкая В.А (1)
  • Малюшкин А.Б., Рогачева Е.Ю (2)
  • Перова О. Д. (1)
  • Перова О.Д. (5)
  • Полникова М.Ю. (8)
  • Стронская И. М (1)
  • Стронская И.М. (5)
  • Узорова О.В., Нефедова Е.А. (1)
  • Ундзенкова А. В., Колпакова О.В. (1)
  • Ушакова О.Д. (6)
  • Чистякова О.В. (1)

Издательство

  • АСТ (1)
  • Владос (3)
  • Леда, Алтея (5)
  • Литера (14)
  • Литур (1)
  • М-КНИГА (6)
  • СМИО Пресс (8)
  • Сфера (6)

Размер

  • 200х125 мм (1)
  • 200х140 мм (7)
  • 215х165 мм (4)
  • 235х165 мм (5)
  • 255х165 мм (2)
  • 440х590 мм (3)
  • 490х330 мм (4)

Страниц

  • 112 (2)
  • 112 с. х 2 (1)
  • 16 (3)
  • 160 (2)
  • 160 с. (Газетная) (1)
  • 258 (газетная) (1)
  • 32 (5)
  • 64 (1)
  • 80 (3)

Тип обложки

  • мягкий (15)
  • картон (1)

Переплёт

  • металлическая пружина (1)
  • мягкий переплет (крепление скрепкой или клеем) (14)
  • мягкая, склейка (1)

Материал

  • картон (3)

Класс

  • 2 (2)
  • 1 (1)
  • 3 (1)
  • 4 (1)
  • 1-4 (1)

Плакаты обучающие и развивающие пособия

  • Демонстрационный плакат Дорожные знаки А2

    Демонстрационный плакат Дорожные знаки А2

    Товар не доступен для заказа

  • Демонстрационный плакат Дорожные знаки А2

    Демонстрационный плакат Дорожные знаки А2

    Товар не доступен для заказа

  • Демонстрационный плакат Правила поведения при пожаре А2

    Демонстрационный плакат Правила поведения при пожаре А2

    Товар не доступен для заказа

  • Демонстрационный плакат Правила пожарной безопапсности А2

    Демонстрационный плакат Правила пожарной безопапсности А2

    Товар не доступен для заказа

  • Карточка «Состав слова в русском языке»

    Карточка «Состав слова в русском языке»

    Товар не доступен для заказа

  • Карточка «Таблица Менделеева» 109*202мм

    Карточка «Таблица Менделеева» 109*202мм

    Товар не доступен для заказа

  • Карточка «Таблица умножения» 109*202мм

    Карточка «Таблица умножения» 109*202мм

    Товар не доступен для заказа

  • Карточка «Таблица умножения» 109*202мм

    Карточка «Таблица умножения» 109*202мм

    Товар не доступен для заказа

  • Карточка-шпаргалка «Алгебра 7 класс. Правила» 155*210

    Карточка-шпаргалка «Алгебра 7 класс. Правила» 155*210

    Товар не доступен для заказа

  • Карточка-шпаргалка «Глагол»

    Карточка-шпаргалка «Глагол»

    Товар не доступен для заказа

  • Карточка-шпаргалка «Гласные в корне слова»

    Карточка-шпаргалка «Гласные в корне слова»

    Товар не доступен для заказа

  • Карточка-шпаргалка «Изменение глаголов / Члены предложения»

    Карточка-шпаргалка «Изменение глаголов / Члены предложения»

    Товар не доступен для заказа

  • Карточка-шпаргалка «Местоимение»

    Карточка-шпаргалка «Местоимение»

    Товар не доступен для заказа

  • Карточка-шпаргалка «Периметр и площадь»

    Карточка-шпаргалка «Периметр и площадь»

    Товар не доступен для заказа

  • Карточка-шпаргалка «Разбор слова по составу / Правила переноса»

    Карточка-шпаргалка «Разбор слова по составу / Правила переноса»

    Товар не доступен для заказа

  • Карточка-шпаргалка «Русский алфавит / Пиши правильно»

    Карточка-шпаргалка «Русский алфавит / Пиши правильно»

    Товар не доступен для заказа

  • Карточка-шпаргалка «Согласные звуки русского языка»

    Карточка-шпаргалка «Согласные звуки русского языка»

    Товар не доступен для заказа

  • Карточка-шпаргалка «Таблица Менделеева / Таблица растворимости»

    Карточка-шпаргалка «Таблица Менделеева / Таблица растворимости»

    Товар не доступен для заказа

  • Карточка-шпаргалка «Ударения / Словарные слова»

    Карточка-шпаргалка «Ударения / Словарные слова»

    Товар не доступен для заказа

  • Карточка-шпаргалка «Часть и целое. Дроби / Таблица умножения»

    Карточка-шпаргалка «Часть и целое. Дроби / Таблица умножения»

    Товар не доступен для заказа

Title

Главная

Карта сайта

Всероссийский телефон доверия:

8-800-2000-122 
           Телефон доверия для помощи лицам с кризисными состояниями и суицидальным поведением:

8-800-200-47-03

ИСТОРИЯ УЧРЕЖДЕНИЯ

Муниципальное бюджетное учреждение “Бокситогорский центр психолого-педагогической, медицинской и социальной помощи” (далее – МБУ «БЦППМиСП», ) функционирует с 01. 10.1992 года. С данного периода времени учреждение имело наименование «Психолого-медико-педагогический центр при отделе народного образования Бокситогорского района Ленинградской области» ( Постановление главы администрации Бокситогорского района Ленинградской области от 30.09.1992г № 662) . Постановлением Главы администрации Муниципального образования «Бокситогорский район» Ленинградской области от 01.12.1997 года № 549 учреждение переименовано в Муниципальное образовательное учреждение «Психолого-медико-педагогический центр» с правами юридического лица и утвержден Устав учреждения с последующей государственной регистрацией. Приказом Комитета общего и профессионального образования «Бокситогорский район»    от 26.11.2002г. № 245  учреждение переименовано в Муниципальное образовательное учреждение для детей, нуждающихся в психолого-педагогической и медико-социальной помощи «Бокситогорский центр диагностики и консультирования». На основании Постановления администрации Бокситогорского муниципального района Ленинградской области № 292 от 04 апреля 2011 года учреждение реорганизовано в форме присоединения к нему  Муниципального образовательного учреждения для детей, нуждающихся в психолого-педагогической и медико-социальной помощи «Центр диагностики и консультирования» города Пикалево.  На основании распоряжения администрации Бокситогорского муниципального района Ленинградской области № 793 от 03 октября 2011 года наименование учреждения изменено на Муниципальное бюджетное образовательное учреждение для детей, нуждающихся в психолого-педагогической и медико-социальной  помощи “Бокситогорский центр диагностики и консультирования”. На основании Постановление  администрации Бокситогорского муниципального района Ленинградской области от 9 июня 2015 года № 744 «О переименовании Муниципального бюджетного образовательного учреждения для детей, нуждающихся в психолого-педагогической и медико-социальной помощи “Бокситогорский центр диагностики и консультирования»  наименование учреждения изменено  на муниципальное бюджетное учреждение “Бокситогорский центр психолого-педагогической, медицинской и социальной помощи»

/ ОБРАЗОВАНИЕ /

Психолого-медико-педагогическая комиссия

ПОДРОБНЕЕ

Коррекционно-развивающий отдел

ПОДРОБНЕЕ

Консультативно-диагностический отдел

ПОДРОБНЕЕ


/ ПОЛЕЗНЫЕ ССЫЛКИ /

Всероссийский телефон доверия

Информационный ресурс Госзаказа Ленинградской области

Сайт Комитета образования Администрации Бокситогорского Муниципального района Ленинградской области

Перечень ФГОС и Образовательных стандартов

Официальный сайт для размещения информации о государственных (муниципальных) учреждениях

Сайт «Единое окно доступа к образовательным ресурсам»

Единая коллекция цифровых образовательных ресурсов

Сайт информационно-образовательных ресурсов

Сайт администрации Бокситогорского муниципального района Ленинградской области

Федеральный портал «Российское образование»

Официальный сайт Министерства образования и науки


  • ГЛАВНАЯ

    Description

  • СВЕДЕНИЯ ОБ ОБРАЗОВАТЕЛЬНОЙ ОРГАНИЗАЦИИ
  • НОВОСТИ
  • ДОКУМЕНТЫ
  • РЕКОМЕНДАЦИИ
  • КОНТАКТЫ

Что такое IDE или интегрированная среда разработки?

История IDE

До появления IDE программисты писали свои программы в текстовых редакторах. Это включало в себя написание и сохранение приложения в текстовом редакторе перед запуском компилятора, принятие к сведению любых сообщений об ошибках, а затем возвращение в текстовый редактор для проверки их кода.

Только в 1983 году компания Borland Ltd. приобрела компилятор Pascal и опубликовала его как TurboPascal, в котором впервые были интегрированы редактор и компилятор.

TurboPascal, возможно, положил начало идее интегрированной среды разработки, но многие считают, что Microsoft Visual Basic (VB), выпущенный в 1991 году, на самом деле был первой настоящей IDE в истории. Построенный на старом языке BASIC, Visual Basic был популярным языком программирования в 1980-х годах. Развитие Visual Basic означало, что вместо этого программирование можно было рассматривать в графических терминах, и стали очевидны заметные преимущества производительности.

Преимущества использования IDE

Интегрированные среды разработки повышают производительность разработчиков. Эти IDE повышают производительность, сокращая время установки, повышая скорость выполнения задач разработки, информируя разработчиков о последних рекомендациях и угрозах, а также стандартизируя процесс разработки, чтобы каждый мог присоединиться к нему.

  • Ускоренная установка: Программистам приходится тратить время на настройку нескольких средств разработки без установленного интерфейса IDE. Интегрируя IDE, программисты могут иметь один и тот же набор возможностей в одном месте без необходимости постоянно переключаться между инструментами.
  • Ускорение задач разработки: Более тесная интеграция задач разработки означает повышение производительности труда разработчиков. Например, разработчики могут анализировать код и проверять синтаксис во время редактирования, что позволяет мгновенно реагировать на появление синтаксических ошибок. Программистам больше не нужно переключаться между приложениями для завершения задач. Кроме того, инструменты и функции IDE помогают программистам организовывать ресурсы, предотвращать ошибки и реализовывать ярлыки.

Чтобы получить еще больше преимуществ, IDE могут помочь реструктурировать процесс разработки, продвигая целостную стратегию. Они заставляют программистов думать о своих действиях с точки зрения всего жизненного цикла разработки (SDLC), а не серии отдельных задач.

  • Непрерывное обучение: Еще одним преимуществом является возможность быть в курсе последних событий и получать образование. Например, разделы справки IDE постоянно обновляются вместе с новыми примерами, шаблонами проектов и т. д. Разработчики, которые постоянно учатся и следят за лучшими практиками, с большей вероятностью принесут пользу своей команде и предприятию, повысив производительность.
  • Стандартизация: Он также регулирует процесс разработки, помогая программистам беспрепятственно работать вместе и помогая новым сотрудникам быстро освоиться, чтобы они могли сразу приступить к работе.

Языки, поддерживаемые IDE

В некоторых случаях IDE предназначены для определенного языка программирования или набора языков, что создает набор функций, соответствующий специфике этого языка. Например, Xcode для языков Objective-C и Swift, API Cocoa и Cocoa Touch.

Однако многоязычные IDE, такие как Eclipse (C, C++, Python, Perl, PHP, Java, Ruby и др.), Komodo (Perl, Python, Tcl, PHP, Ruby, Javascript и др.) и NetBeans (Java, JavaScript, PHP, Python, Ruby, C, C++ и другие) существуют.

Разработчики часто могут найти поддержку альтернативных языков через плагины. Например, Flycheck — это расширение для проверки синтаксиса для GNU Emacs 24 с поддержкой 39 языков.

Различные типы IDE

Разработчики работают по-разному, создавая различные типы кода, а это значит, что существует множество IDE, которые можно использовать. Некоторые из них предназначены для работы с одним конкретным языком, в то время как другие представляют собой облачные IDE, IDE, настроенные для создания мобильных приложений или HTML, а также IDE, предназначенные специально для разработки Apple или Microsoft.

Многоязычная среда IDE

Многоязычные среды IDE, такие как Eclipse, Aptana, Komodo, NetBeans и Geany, поддерживают несколько языков программирования.

  • Eclipse: Поддерживает C, C++, Perl, Python, Ruby, PHP, Java и другие. Это бесплатный редактор с открытым исходным кодом для многих сред разработки. Хотя он начинался как среда разработки Java, он расширился за счет плагинов. Эта среда разработки управляется и управляется консорциумом Eclipse.org.
  • NetBeans: Поддерживает Java, PHP, JavaScript, C, C++, Python, Ruby и другие. Это также бесплатно и с открытым исходным кодом. Модули обеспечивают все функции IDE. Разработчики могут добавить поддержку других языков программирования, установив дополнительные модули.
  • Komodo IDE: Поддерживает Perl, PHP, Python, Tcl, JavaScript, Ruby и другие. Это инструмент корпоративного уровня с более высокой ценой.
  • Aptana: Поддерживает HTML, JavaScript, CSS, AJAX и другие через плагины. Это популярный выбор для программистов, занимающихся разработкой веб-приложений.
  • Geany: Поддерживает C, PHP, Java, HTML, Perl, Python, Pascal и многие другие. Это очень настраиваемая среда с большим набором плагинов.

IDE для мобильных процессов разработки

Специально для мобильной разработки существуют IDE, включающие PhoneGap и Titanium Mobile от Appcelerator.

Многие IDE, особенно многоязычные IDE, имеют подключаемые модули для мобильной разработки. Eclipse, например, имеет такую ​​функциональность.

HTML IDE

IDE для разработки HTML-приложений являются одними из самых популярных IDE. Например, DreamWeaver, HomeSite и FrontPage автоматизируют множество задач, связанных с процессом разработки веб-сайта.

Облачная IDE

Облачные IDE становятся все более популярными, и за ними нужно следить. Возможности таких сетевых IDE быстро растут; по этой причине большинству крупных поставщиков, вероятно, придется предлагать его, если они хотят оставаться конкурентоспособными на своих рынках. Облачные IDE важны, потому что они дают программистам доступ к своему коду из любого места.

Например, Nitrous — это облачная платформа среды разработки, поддерживающая Ruby, Python, Node. js и другие. Cloud9 IDE поддерживает более 40 языков, включая PHP, Ruby, Python, JavaScript с Node.js и Go. Heroku — это облачная платформа разработки как услуга (PaaS), поддерживающая несколько языков программирования.

IDE, специально предназначенные для Apple или Microsoft

Следующие IDE предназначены для программистов, работающих в средах Microsoft или Apple:

  • Visual Studio: Поддерживает VB.NET, Visual C++, C#, F# и другие. Visual Studio — это интегрированная среда разработки Microsoft, предназначенная для создания приложений для платформы Microsoft.
  • MonoDevelop: Поддерживает Visual Basic, C/C++, C# и дополнительные языки .NET.
  • Xcode: Поддерживает языки Swift и Objective-C, а также API-интерфейсы Cocoa и Cocoa Touch. Эта IDE предназначена исключительно для создания приложений для iOS и Mac. Он включает в себя конструктор графического интерфейса и симулятор iPhone/iPad.
  • Эспрессо: Поддерживает XML, HTML, CSS, PHP и JavaScript. Espresso — это инструмент, специально предназначенный для веб-программистов Mac.
  • Код: Поддерживает PHP, CSS, HTML, JavaScript, AppleScript и Cocoa API. Эта IDE отмечена как «разработка в одном окне» для пользователей Mac.

IDE, созданная для определенных языков

Существуют специальные IDE, предназначенные для программистов, работающих на одном языке. К ним относятся Jikes и Jcreator для Java, CodeLite и C-Free для C/C++, RubyMine для Ruby/Rails и Idle для Python.

Безопасность приложений и интегрированная среда разработки.

Хотя безопасность приложений является важнейшим приоритетом для групп разработчиков, управление тестированием безопасности в интегрированной среде разработки часто представляло собой серьезную проблему. Разработчики, стремящиеся уложиться в сроки в гибких или каскадных процессах разработки программного обеспечения, часто уже используют множество отдельных инструментов. Новая технология AppSec, в которой отсутствуют гибкие API-интерфейсы и которую сложно использовать в интегрированной среде разработки, часто не будет принята, что приведет к большим проблемам с безопасностью и трудностям с соблюдением требований нормативных рамок, таких как соответствие требованиям HIPAA и SarbOx.

Для повышения безопасности приложений Veracode предлагает набор решений для тестирования безопасности настольных компьютеров, веб-приложений и мобильных приложений в облачной службе, которые можно легко комбинировать в интегрированной среде разработки для поиска и устранения недостатков в любой точке SDLC.

Документы и слайды

Документы и слайды

Высокоточная проверка ввода: запирание входной двери. Кэтлин Фишер (Университет Тафтса).

Аннотация: Кибербезопасность — это сложная проблема со значительными негативными последствиями для личной, финансовой и национальной безопасности из-за неправильного решения. Одна из причин сложности заключается в том, что защитники должны запирать каждую дверь, в то время как защитники должны найти только один вход. Защита от ввода вредоносных программ эквивалентна блокировке входной двери, но, согласно объявлению DARPA Safedocs Broad Agency, 80% из проблем в базе данных MITRE Common Vulnerabilities and Exposures связаны с ошибками проверки ввода. Мы даже не запираем должным образом входную дверь! Как будет выглядеть высоконадежная проверка ввода? По крайней мере, это требует нескольких шагов:

(1) указание языка ввода на формальном языке описания, (2) проверка спецификации путем систематического тестирования, (3) создание синтаксического анализатора высокой надежности, а затем (4) гарантировать, что клиентский код правильно обрабатывает все термины на языке ввода.

Конечно, это видение вводит множество практических проблем, включая выразительность языка формального описания, существование и удобство использования высоконадежной инфраструктуры синтаксического анализа, производительность сгенерированных синтаксических анализаторов и применимость инструментов рассуждений для оценки клиентского кода. В этом докладе я расскажу о состоянии дел в области высоконадежной проверки входных данных, обсужу препятствия для внедрения и выскажу предположения о будущих направлениях исследований.

Биография: Кэтлин Фишер — профессор и заведующая кафедрой компьютерных наук Университета Тафтса. Ранее она была менеджером программы в DARPA и главным членом технического персонала исследовательской лаборатории AT&T. Она получила степень доктора компьютерных наук в Стэнфордском университете. Исследования Кэтлин сосредоточены на развитии теории и практики языков программирования, а также на применении идей сообщества языков программирования к проблеме специального управления данными. Кэтлин является членом ACM и бывшим председателем специальной группы ACM по языкам программирования (SIGPLAN). Она работала председателем программ PLDI, ICFP и OOPSLA, редактором Journal of Functional Programming и ассоциированным редактором TOPLAS. Она была сопредседателем CRA-W с 2008 по 2011 год и часто выступает на мероприятиях CRA-W. Она является бывшим председателем ISAT DARPA и членом Совета CCC. Она была стипендиатом фонда Hertz.

[слайды]

Формальные языки, глубокое обучение, топология и алгебраические текстовые задачи. Джордж Цибенко и Джошуа М. Акерман (Дартмутский колледж).

Аннотация: В этой статье описываются взаимосвязи между различными современными архитектурами нейронных сетей и формальными языками, например, структурированные языковой иерархией Хомского. Особый интерес представляют способности нейронной архитектуры представлять, распознавать и генерировать слова определенного языка, обучаясь на положительных и отрицательных образцах слов в языке. Особый интерес представляют некоторые отношения между языками, сетями и топологией, которые мы обрисовываем аналитически и исследуем с помощью нескольких иллюстративных экспериментов. Конкретно сравнивая аналитические результаты, связывающие формальные языки с топологией с помощью алгебраических задач со словами, с эмпирическими результатами, основанными на нейронных сетях и постоянных гомологических вычислениях, мы видим доказательства того, что определенные наблюдаемые топологические свойства соответствуют свойствам, предсказанным аналитически. Такие результаты обнадеживают для понимания роли, которую современное машинное обучение может играть в задачах обработки формального языка.

Цибенко Биография: Джордж Цибенко — профессор инженерии Дороти и Уолтера Грэмм в Дартмуте. Профессор Цибенко внес ключевой вклад в исследования в области обработки сигналов, нейронных вычислений, параллельной обработки и вычислительного поведенческого анализа. Он был главным редактором-основателем IEEE/AIP Computing in Science and Engineering, IEEE Security & Privacy и IEEE Transactions on Computational Social Systems. В прошлом он работал в Совете по оборонным наукам и Научно-консультативном совете ВВС, а также является советником Армейского киберинститута в Вест-Пойнте. Профессор Цибенко является членом IEEE и SIAM. Он получил степень бакалавра (Университет Торонто) и доктора философии (Принстон) по математике. Цибенко был соучредителем компании Flowtraq Inc, которая была приобретена Riverbed Technology в 2017 году9.0005

Биография Аккермана: Джошуа Акерман — аспирант Института безопасности, технологий и общества Дартмутского колледжа. Его исследования в целом сосредоточены на пересечении машинного обучения и кибербезопасности с особым акцентом на том, как сделать системы машинного обучения более надежными и надежными. Он получил степень бакалавра в области математики со специализацией в области компьютерных наук в Университете Карнеги-Меллона.

[Бумага] [слайды]

Незавершенная работа: Единая алгебраическая структура анализа программ. Мартин Ринар (MIT), Хенни Сипма (Aarno Labs), Томас Бурже (MIT).

Аннотация: Программный анализ традиционно формулировался как точечный. решения конкретных задач анализа программ. Мы представляем комплексная, унифицированная структура, в которой анализ программ алгебраическая решетчатая структура, основанная на том, что программа отслеживает, что каждый анализ определяет. В этих рамках каждый программный анализ характеризуется набором программных следов, которые он идентифицирует, с программный анализ, упорядоченный обратным включением подмножества по наборам выявленные программные следы. С этим заказом сбор программы анализ содержит решетку с наименьшей верхней границей и наибольшей нижней граница.

[Бумага] [слайды]

«Дословно: проверенный генератор лексеров».

Дерек Эгольф, Сэм Лассер и Кэтлин Фишер (Университет Тафтса).

Лексеры и синтаксические анализаторы часто используются в качестве внешних интерфейсов для соединения входных данных из внешнего мира с внутренними компонентами более крупной программной системы. Эти внешние интерфейсы являются естественными целями для злоумышленников, которые хотят скомпрометировать более крупную систему. Формально проверенный инструмент, выполняющий механизированный лексический анализ, сделает атаки на эти интерфейсы менее эффективными.

В этой статье мы представляем Verbatim, исполняемый лексический модуль, который реализован и проверен с помощью Coq Proof Assistant. Мы доказываем, что Verbatim корректен в отношении стандартной спецификации лексера. Мы также анализируем его теоретическую сложность и приводим результаты эмпирической оценки эффективности. Все доказательства правильности, представленные в статье, были механизированы в Coq.

[бумага] [разговорное видео]

«Теория формального языка для практической безопасности»; Андреас Якоби, Яннис Лойтер и Стефан Лакс (Баухаус-Университет Веймар).

Когда двоичные данные отправляются от одной стороны к другой, кодирование данных можно описать как язык «сериализации данных» (DSL). Многие DSL используют шаблон «префикс длины» для строк, контейнеров и других элементов данных переменной длины. Он состоит из кодирования длины элемента, за которым следует кодирование самого элемента — без закрывающих скобок или «конечных» символов. Получатель должен определить последний байт из длины, считанной ранее. Языки с префиксом длины не являются контекстно-свободными. Таким образом, изобилие инструментов и методов для определения, анализа и синтаксического анализа контекстно-свободных языков кажется бесполезным для языков с префиксом длины. Это, по-видимому, объясняет, почему неправильные спецификации языков с префиксами длины и ошибочные написанные от руки синтаксические анализаторы так часто являются основной причиной проблем с безопасностью и эксплойтов, как, например, в случае со знаменитой ошибкой Heartbleed. Можно даже подумать, что использование языков с префиксом длины представляет угрозу безопасности.

Но это соображение было бы неверным. Мы представляем преобразование слов из «безконтекстно-свободных» языков (надмножество языков без контекста и языков с префиксом длины) в слова из правильных бесконтекстных языков. Преобразование фактически позволяет использовать инструменты из контекстно-свободных языков для работы с языками с префиксом длины.

Наше преобразование выполняется на машине Тьюринга с логарифмическим пространством. Это подразумевает теоретический результат того, что языки без контекста calc относятся к классу сложности logCFL. Точно так же детерминированные языки без контекста вычислений находятся в logDCFL. Чтобы работать в линейном времени, нужно расширить машину Тьюринга стеком для хранения дополнительных данных.

[Бумага] [разговорное видео]

«Формальный синтез компонентов фильтра для использования в архитектурных преобразованиях, повышающих безопасность»; Дэвид Хардин и Конрад Слинд (Collins Aerospace).

Разработчики, критически важные для безопасности, уже давно признали важность применения высокой степени проверки к системе (или подсистемы) границы ввода/вывода. Однако отсутствие внимательности в развитии таких компонентов фильтра может привести к увеличению, а не уменьшение поверхности атаки. О программе DARPA Cyber-Assured Программа системной инженерии (CASE), мы сосредоточили наши исследования усилия по выявлению киберуязвимостей на ранней стадии системы разработка, в частности на этапе разработки архитектуры, и затем автоматически синтезируются компоненты, смягчающие против выявленных уязвимостей из высокоуровневых спецификаций. Этот подход хорошо совместим с целями LangSec. сообщество. Достижения в формальных методах позволили нам получить аппаратные/программные реализации, которые одновременно являются производительными и гарантировано правильно. С помощью этих инструментов мы можем синтезировать высоконадежные «строительные блоки», которые могут быть составлены автоматически с высокой степенью уверенности для создания надежных систем, используя метод, который мы называем архитектурными преобразованиями, повышающими безопасность. Наш подход, ориентированный на синтез обеспечивает более эффективную точку вставки для формальных методов, чем возможно с помощью аналитических методов постфактум, как формальное средства методов непосредственно способствуют внедрению системы, не требуя, чтобы разработчики стали экспертами по формальным методам. Наш методы охватывают разработку систем, аппаратного и программного обеспечения, а также совместное проектирование/обеспечение аппаратного и программного обеспечения. Мы иллюстрируем нашу метод и инструменты с примером, который реализует повышение безопасности преобразования системных архитектур, выраженные с помощью параметра Архитектура Язык анализа и проектирования (AADL). Мы покажем, как проверка ввода компоненты фильтра могут быть синтезированы из высокоуровневых обычные или контекстно-свободные языковые спецификации, и проверено на соответствие арифметическим ограничениям, извлеченным из AADL модель. Наконец, мы гарантируем, что целью логики фильтра является точно отражены в двоичном коде приложения за счет использования проверенный компилятор CakeML, в случае программного обеспечения, или Ограниченная алгоритмическая цепочка инструментов C с формальными формами на основе ACL2. проверка, в случае совместной разработки аппаратного и программного обеспечения.

[Бумага] [Слайды] [обсуждение видео]

«Доступные формальные методы для разработки проверенных синтаксических анализаторов»; Летиция Ли (BAE Systems), Грег Икман (BAE Systems), Элиас Гарсия (Особые обстоятельства) и Сэм Атман (Особые обстоятельства).

Недостатки безопасности в программах чтения Portable Document Format (PDF) могут позволить PDF-файлам скрывать вредоносное ПО, эксфильтровать информацию и выполнять вредоносный код. Чтобы средство чтения PDF смогло идентифицировать эти некорректные PDF-файлы, необходимо провести синтаксический анализ, а затем проанализировать семантические свойства или структуру результата синтаксического анализа. В этой статье показано, как доступные для разработчиков формальные методы поддерживают теоретико-языковой подход к безопасности при анализе и проверке PDF. Мы разрабатываем синтаксический анализатор и валидатор PDF на ACL2, языке доказательства теорем, который позволяет нам генерировать доказательства желаемых свойств функций, таких как правильность. Структура парсера и семантические правила определяются грамматикой PDF и попадают в определенные шаблоны, поэтому могут быть автоматически составлены из набора проверенных базовых функций. Вместо того, чтобы требовать от разработчика знания формальных методов и написания кода ACL2 вручную, мы используем Tower, наш модульный метаязык, для создания проверенных функций и доказательств ACL2, а также эквивалентный код C для анализа семантических свойств, которые затем можно интегрировать в нашу программу. проверенный синтаксический анализатор или существующий синтаксический анализатор для поддержки проверки PDF.

[бумага] [обсуждение видео]

«Дифференциальный анализ декодеров команд x86-64»; Уильям Вудрафф (Trail of Bits), Ники Кэрролл (Университет Джорджа Мейсона) и Себастьян Питерс (Эйндховенский технологический университет).

Дифференциальный фаззинг заменяет традиционные фаззер-оракулы, такие как сбои, зависания, некорректный доступ к памяти, оракулом различий, где реализация спецификации считается потенциально ошибочной, если ее поведение отличается от поведения другой реализации на тех же входных данных. Дифференциальный фаззинг успешно применялся в криптографии и анализаторах сложных форматов приложений, таких как PDF и ELF.

В этом документе описывается применение дифференциального фаззинга к декодерам инструкций x86-64 для обнаружения ошибок. Он представляет MISHEGOS, новый дифференциальный фаззер, который обнаруживает несоответствия декодирования между декодерами инструкций. Мы описываем архитектуру MISHEGOS и подход к обнаружению ошибок, а также влияние ошибок декодирования и расхождений на безопасность. Мы также описываем новую стратегию фаззинга для декодеров инструкций на архитектурах с переменной длиной, основанную на аппроксимированной модели машинных инструкций.

MISHEGOS производит сотни миллионов тестов декодера в час на скромном оборудовании. Мы использовали MISHEGOS для обнаружения сотен ошибок в популярных декодерах команд x86-64, не полагаясь на аппаратный декодер для подтверждения истины. MISHEGOS включает расширяемую структуру для анализа результатов кампании фаззинга, позволяющую пользователям обнаруживать ошибки в одном декодере или различные несоответствия между несколькими декодерами. Мы предоставляем доступ к исходному коду MISHEGOS по разрешающей лицензии.

[бумага] [обсуждение видео]

«Богемия: Валидатор для фреймворков парсера»; Аниш Паранджпе и Ганг Тан (Университет штата Пенсильвания).

Синтаксический анализ повсеместно используется в проектах по разработке программного обеспечения, начиная от небольших утилиты командной строки, высокозащищенные сетевые клиенты, большие компиляторы. Программисты предоставляются с множеством библиотек синтаксического анализа на выбор. Однако, ошибки реализации в библиотеках синтаксического анализа позволяют генерировать неправильные парсеры, которые, в свою очередь, могут привести к сбою вредоносных входных данных системы или запустить эксплойты безопасности. В этой статье мы описываем облегченную структуру проверки под названием Bohemia. который разработчик библиотеки синтаксического анализа может использовать в качестве инструмента в наборе инструментов для интеграционного тестирования. Фреймворк использует концепцию эквивалентности. Modulo Inputs (EMI) для генерации измененных входных грамматик для стресс-тестирование библиотеки синтаксического анализа. Мы также описываем результат оценка Bohemia с помощью набора библиотек синтаксического анализа, которые используют отдельные алгоритмы разбора. В ходе проверки мы обнаружили ряд ошибок в этих библиотеках. О некоторых из них сообщалось и исправлено разработчиками.

[бумага] [разговорное видео]

«RL-GRIT: обучение с подкреплением для грамматического вывода»; Уолт Вудс (Galois Inc.

).

Когда эксперт по формату работает над пониманием использования формата данных, примеры формата данных часто более репрезентативны, чем спецификация формата. Например, два разных приложения могут использовать очень разные представления JSON или два варианта написания PDF приложения могут использовать очень разные области PDF Спецификация для реализации одного и того же визуализируемого содержимого. Сложность возникающие из этих различных источников, могут привести к большим, сложные для понимания поверхности атаки, представляющие угрозу безопасности при рассмотрении как эксфильтрации, так и данных шизофрении. Грамматика вывод может помочь в описании генератора практического языка за примерами формата данных. Однако большинство грамматических выводов исследования сосредоточены на естественном языке, а не на форматах данных, и не поддерживают важные функции, такие как рекурсия типов. Мы предлагаем роман набор механизмов для вывода грамматики, RL-GRIT, и применить их к понимание форматов данных де-факто. После просмотра существующей грамматики решения, было определено, что новый, более гибкий эшафот можно найти в Reinforcement Learning (RL). В рамках этого работы, мы выкладываем множество алгоритмических изменений, необходимых для адаптации RL от его традиционной, последовательной временной среды к очень взаимозависимая среда парсинга. Результат — алгоритм который может наглядно изучить рекурсивные управляющие структуры в простых форматы данных и может извлекать осмысленную структуру из фрагментов формат PDF. Принимая во внимание, что предыдущая работа в области грамматического вывода была сосредоточена на либо обычные языки, либо синтаксический анализ групп, мы показываем, что RL может использоваться, чтобы превзойти выразительность обоих классов, и предлагает четкий путь к изучению контекстно-зависимых языков. Предлагаемый Алгоритм может служить строительным блоком для понимания экосистемы форматов данных де-факто.

[бумага] [обсуждение видео]

«Поиск несовместимых документов с использованием сообщений об ошибках от нескольких синтаксических анализаторов»; Майкл Робинсон (Американский университет).

Принятие файла одним синтаксическим анализатором не является надежным указание на то, соответствует ли файл заявленному формату. Ошибки как в синтаксическом анализаторе, так и в спецификации формата означает, что совместимый файл может не пройти синтаксический анализ или что несовместимый файл может читаться без видимых затруднений. Последняя ситуация представляет собой значительный риск для безопасности, и его следует избегать. эта статья предполагает, что лучший способ оценить соответствие спецификации формата заключается в проверке набора сообщений об ошибках, выдаваемых набором синтаксических анализаторов а не один парсер. Если и образец совместимых файлов, и образец несовместимых файлов доступен, затем мы покажем, как статистический тест, основанный на отношении псевдоправдоподобия, может быть очень эффективен при определении соответствия файла. Наш метод формат агностик и не опирается непосредственно на формальную спецификацию Формат. Хотя эта статья посвящена случаю PDF формате (ISO 32000-2), мы не пытаемся использовать какие-либо конкретные детали формата. Кроме того, мы показываем, как анализ главных компонент может быть полезно разработчику спецификации формата для оценки качество и структура этих образцов файлов и парсеров. Пока эти тесты абсолютно рудиментарны, кажется, что их использование для измерять изменчивость формата файлов и выявлять несовместимые файлы. одновременно новый и удивительно эффективный.

[бумага] [разговорное видео]

«Безопасность механизированного типа для постепенного потока информации»; Тяньюй Чен и Джереми Сик (Университет Индианы).

Мы моделируем язык безопасности с постепенным потоком информации метки в помощнике по корректуре, продемонстрируйте его потенциальное применение для анализ и защита конфиденциальных входных данных пользователя, представить семантику в качестве интерпретатора определений и докажите безопасность типов. Мы сравниваем языковые особенности и свойства различных существующих постепенных языки безопасности, проливающие свет на будущие проекты.

[Бумага] [обсуждение видео]

«Демистификация PDF с помощью машиночитаемого определения»; Питер Вятт (PDF Association Inc.

).

В этом документе Арлингтонская модель PDF представлена ​​как первая модель открытого доступа, всеобъемлющее машиночитаемое определение всех формально определенные объекты PDF и отношения целостности данных. Этот представляет основную часть последней спецификации ISO PDF 2.0 на 1000 страниц. и является определением всей объектной модели PDF-документа, установление современной «основной правды» для всех будущих PDF-файлов. исследовательские усилия и исполнители. Выражается в виде набора текстовых Файлы TSV с 12 полями данных, модель Arlington PDF в настоящее время определяет 514 различных объектов PDF с 3551 ключом и элементом массива и использует 40 пользовательских предикатов для кодирования более 5000 правил. Модель Arlington PDF была успешно проверена на соответствие альтернативным модели, а также значительный массив существующих файлов данных, и был широко распространен в исследовательском сообществе SafeDocs, а также в Техническая рабочая группа PDF Ассоциации PDF. Он уже выделил различные существующие искажения данных и вызвал несколько изменения в спецификации PDF 2. 0, чтобы отразить де-факто уточнение, устранение неясностей и исправление ошибок.

[бумага] [обсуждение видео]

«Создание обсерватории файлов для разработки безопасного синтаксического анализатора»; Тим Эллисон, Уэйн Берк, Крис Маттманн, Анастасия Менсикова, Филип Саузэм и Райан Стоунбрейкер (Лаборатория реактивного движения НАСА).

Общеизвестно, что синтаксический анализ ненадежных данных является сложной задачей. Неспособность справиться правильно созданные злонамеренные данные могут привести (и приводят) к широкому спектру уязвимостей. Языковая теоретическая безопасность (LangSec) Философия стремится устранить необходимость для разработчиков применять ad hoc решения, вместо этого предлагая формально правильные и проверяемые входные данные обработка на протяжении всего жизненного цикла разработки программного обеспечения. Один из ключевых компонентов в разработке безопасных парсеров представляет собой корпус с широким охватом который позволяет разработчикам понять проблемное пространство для данного формата и использовать, возможно, в качестве исходных материалов для фаззинга и других автоматизированное тестирование. В этой статье мы предлагаем обновленную информацию о разработка файловой обсерватории для сбора и анализа разнообразная коллекция файлов в масштабе. В частности, мы сообщаем о добавление корпуса баг-трекеров и новых аналитических методов на наш существующий корпус.

[бумага] [слайды] [разговорное видео]

«Pegmatite: анализ PEG с полями длины в программном и аппаратном обеспечении»; Зефир Лукас, Джоанна Лю, Прашант Анантараман и Шон Смит (Дартмутский колледж).

Поскольку синтаксические анализаторы являются линией защиты между двоичными файлами и ненадежными данных, они являются одними из наиболее распространенных источников уязвимостей в программного обеспечения. Теоретико-языковая безопасность обеспечивает подход к внедрить усиленные парсеры. Мы указываем двоичный формат как формальный грамматику и реализовать распознаватель для этой формальной грамматики. Однако, большинство двоичных форматов используют такие конструкции, как поле длины, повторение поле и инструкцию смещения. Большинство форматов грамматики не поддерживает эти особенности. 92) время и параллельный алгоритм парсинга Вычислить ПЭГ за время O(n). Мы также представляем Pegmatite, инструмент для генерировать эти парсеры на C с возможностью генерировать код VHDL.

[бумага] [разговорное видео]

«Открытие новейших вычислений за пределами абстракции»; Марк Бодди, Джим Карчиофини, Тодд Карпентер, Алекс Марер, Райан Перутка и Кайл Нельсон (Adventium Labs).

В этом отчете о незавершенных работах мы описываем текущее исследование нашего проекта DECIMAL, направленное на решение проблемы моделирования вычислительных механизмов с достаточной точностью, чтобы рассуждать о семантике выполнения программ вне границ абстракции. Разработанный нами формализм, основанный на автоматах, специально разработан для поддержки рассуждений о временном поведении над композициями многокомпонентных автоматов, моделирующих различные части изучаемой системы. Мы покажем, как мы используем композицию для моделирования широкого спектра конструкций, включая синхронизацию через границы абстракции, взаимодействие асинхронных процессов и определение программ, которые можно обобщить для различных архитектур и локализованных вариаций в спецификации программы.

[бумага] [обсуждение видео]

«Проверенный генератор парсеров для приложений микроконтроллеров»; Самид Али и Шон Смит (Дартмутский колледж).

В этом документе представлен набор инструментов для создания синтаксических анализаторов, который генерирует проверенные синтаксические анализаторы на основе предоставленного пользователем описания синтаксического анализатора. Это описание синтаксического анализатора описывается с использованием нового языка описания синтаксического анализатора (PDL). Синтаксические анализаторы, сгенерированные этим языком описания синтаксических анализаторов, не только проверены (чтобы гарантировать завершение синтаксического анализа и предотвратить повреждение памяти), но также строго ограничены в выразительности, поскольку PDL поддерживается формальной языковой моделью (конечным автоматом). математические ограничения их сложности, что позволяет нам рассуждать о таких свойствах, как разрешимость и эквивалентность. Хотя это и не является целью этой работы, в будущем мы стремимся расширить эту работу с помощью модуля, который позволит нам тестировать парсерную эквивалентность одного или нескольких сгенерированных парсеров. Произвольный написанный вручную синтаксический анализатор, написанный на C, не позволяет нам с такой гибкостью рассуждать о таких свойствах. Эти синтаксические анализаторы являются нулевыми копиями, предназначенными для работы с крупномасштабными конечными машинами, а также достаточно компактными, чтобы их можно было развертывать на микроконтроллерах с ограниченными вычислительными ресурсами. Кроме того, PDL спроектирован так, чтобы быть кратким и достаточно описательным для описания часто встречающихся грамматических конструкций, встречающихся в пакетах сетевых протоколов. прошивки устройства Ubertooth One и атаки на них с помощью созданных вручную искаженных пакетов BLE LL. Наши первоначальные результаты показывают, что усиленные синтаксические анализаторы эффективны против искаженных пакетов. Наша цель — протестировать его с помощью большого количества известных эксплойтов BLE LL, а также провести фаззинг, чтобы тщательно оценить безопасность этих синтаксических анализаторов. микроконтроллеры BLE

[бумага] [слайды] [обсуждение видео]

«Оптимизация размещения передачи данных с помощью анализа Парето»; Дж.

Питер Брэди и Шон Смит (Дартмутский колледж).

Мы демонстрируем новый способ использования посредничества данных и оптимизации Парето для добавления теоретико-языковой безопасности к программным приложениям путем оценки структур данных приложения и их взаимодействия с другими данными в процессе работы приложения. Мы создаем общую модель и автоматизированные программы, которые предоставляют разработчику простой способ выбрать точку баланса между защитой и производительностью.

[бумага] [обсуждение видео]

«На пути к платформе для сравнения генераторов бинарных синтаксических анализаторов»; Оливье Левиллен, Себастьян Но и Айна Токи Расоаманана (Télécom SudParis, Парижский политехнический институт).

Двоичные синтаксические анализаторы широко используются в программном обеспечении, которое мы используем каждый день, будь то интерпретация форматов файлов или сообщений сетевых протоколов. Однако синтаксические анализаторы обычно ненадежны и являются обычным местом для ошибок и уязвимостей безопасности. За прошедшие годы было разработано несколько проектов, чтобы попытаться решить эту проблему с использованием различных форм, таких как комбинаторы синтаксических анализаторов или языки, специфичные для предметной области. Чтобы лучше понять эту богатую экосистему, мы запустили платформу для тестирования и сравнения таких инструментов с различными спецификациями. С помощью нашей так называемой «платформы LangSec» мы обнаружили ошибки в различных реализациях и получили представление об этих инструментах.

[бумага] [обсуждение видео]

Спецификация OpenAPI — Версия 3.0.3

Версия 3.0.3

Ключевые слова «ДОЛЖЕН», «НЕ ДОЛЖЕН», «ТРЕБУЕТСЯ», «ДОЛЖЕН», «НЕ ДОЛЖЕН», «ДОЛЖЕН», «НЕ ДОЛЖЕН», «РЕКОМЕНДУЕТСЯ», «НЕ РЕКОМЕНДУЕТСЯ», «МОЖЕТ» и «ДОПОЛНИТЕЛЬНО» в этом документе должны интерпретироваться, как описано в BCP 14 RFC2119 RFC8174, когда и только тогда, когда они появляются всеми заглавными буквами, как показано здесь.

Этот документ находится под лицензией Apache License, Version 2. 0.

Введение

Спецификация OpenAPI (OAS) определяет стандартный, не зависящий от языка интерфейс для RESTful API, который позволяет людям и компьютерам обнаруживать и понимать возможности службы без доступа к исходному коду, документации или проверки сетевого трафика. При правильном определении потребитель может понимать и взаимодействовать с удаленной службой с минимальным количеством логики реализации.

Определение OpenAPI затем может использоваться инструментами создания документации для отображения API, инструментами генерации кода для создания серверов и клиентов на различных языках программирования, инструментами тестирования и многими другими вариантами использования.

Содержание

  • Определения
    • Документ OpenAPI
    • Шаблон пути
    • Типы носителей
    • Коды состояния HTTP
  • Спецификация
    • Версии
    • Формат
    • Структура документа
    • Типы данных
    • Расширенное форматирование текста
    • Относительные ссылки в URL-адресах
    • Схема
      • Объект OpenAPI
      • Информационный объект
      • Контакт Объект
      • Объект лицензии
      • Объект сервера
      • Объект переменной сервера
      • Компоненты Объект
      • Пути Объект
      • Объект элемента пути
      • Операционный Объект
      • Объект внешней документации
      • Объект параметров
      • Объект тела запроса
      • Тип носителя Объект
      • Объект кодирования
      • Ответы Объект
      • Объект ответа
      • Объект обратного вызова
      • Пример объекта
      • Объект связи
      • Объект заголовка
      • Тег объекта
      • Справочный объект
      • Объект схемы
      • Дискриминатор Объект
      • XML-объект
      • Объект схемы безопасности
      • Объект потоков OAuth
      • Объект потока OAuth
      • Объект требования безопасности
    • Расширения спецификации
    • Фильтрация безопасности
  • Приложение A: История изменений

Определения

Документ OpenAPI

Документ (или набор документов), определяющий или описывающий API. Определение OpenAPI использует спецификацию OpenAPI и соответствует ей.

Шаблон пути

Шаблон пути относится к использованию выражений шаблона, разделенных фигурными скобками ({}), для пометки раздела пути URL как заменяемого с использованием параметров пути.

Каждое выражение шаблона в пути ДОЛЖНО соответствовать параметру пути, который включен в сам элемент пути и/или в каждую из операций элемента пути.

Типы носителей

Определения типов носителей распределены по нескольким ресурсам. Определения типа носителя ДОЛЖНЫ соответствовать RFC6838.

Некоторые примеры возможных определений типа носителя:

 text/plain; кодировка = utf-8
  приложение/json
  приложение/vnd.github+json
  приложение/vnd.github.v3+json
  приложение/vnd.github.v3.raw+json
  приложение/vnd.github.v3.text+json
  приложение/vnd.github.v3.html+json
  приложение/vnd.github.v3.full+json
  приложение /vnd.github.v3.diff
  приложение /vnd.github.v3.patch
 
Коды состояния HTTP

Коды состояния HTTP используются для индикации состояния выполняемой операции. Доступные коды состояния определены в RFC7231, а зарегистрированные коды состояния перечислены в реестре кодов состояния IANA.

Спецификация

Версии

Версия спецификации OpenAPI создается с использованием семантического управления версиями 2.0.0 (semver) и соответствует спецификации semver.

Основной . второстепенная часть сегмента (например, 3.0 ) ДОЛЖЕН обозначать набор функций OAS. Как правило, в версиях .patch в этом документе рассматриваются ошибки, а не набор функций. Инструменты, поддерживающие OAS 3.0, ДОЛЖНЫ быть совместимы со всеми версиями OAS 3.0.*. Версия исправления НЕ ДОЛЖНА учитываться инструментами, например, не делая различий между 3.0.0 и 3.0.1 .

Каждая новая второстепенная версия Спецификации OpenAPI ДОЛЖНА позволять любому документу OpenAPI, который действителен по сравнению с любой предыдущей второстепенной версией Спецификации, в пределах той же основной версии быть обновленным до новой версии Спецификации с эквивалентной семантикой. Такое обновление ДОЛЖНО требовать только изменения свойство openapi для новой минорной версии.

Например, допустимый документ OpenAPI 3.0.2 после изменения свойства openapi на 3.1.0 ДОЛЖЕН быть действительным документом OpenAPI 3.1.0, семантически эквивалентным исходному документу OpenAPI 3.0.2. Новые второстепенные версии спецификации OpenAPI ДОЛЖНЫ быть написаны, чтобы обеспечить эту форму обратной совместимости.

Документ OpenAPI, совместимый с OAS 3.*.*, содержит обязательное поле openapi , обозначающее используемую семантическую версию OAS. (Документы OAS 2.0 содержат поле версии верхнего уровня с именем swagger и значение "2.0" .)

Формат

Документ OpenAPI, соответствующий спецификации OpenAPI, сам по себе является объектом JSON, который может быть представлен в формате JSON или YAML.

Например, если поле имеет значение массива, будет использоваться представление массива JSON:

 {
   "поле": [ 1, 2, 3 ]
}
 

Все имена полей в спецификации чувствительны к регистру . Сюда входят все поля, которые используются в качестве ключей на карте, за исключением случаев, когда явно указано, что ключами являются без учета регистра .

Схема предоставляет два типа полей: фиксированные поля с объявленным именем и шаблонные поля, которые объявляют шаблон регулярного выражения для имени поля.

Поля шаблона ДОЛЖНЫ иметь уникальные имена в содержащем объекте.

Чтобы сохранить возможность переключения между форматами YAML и JSON, РЕКОМЕНДУЕТСЯ использовать YAML версии 1.2 вместе с некоторыми дополнительными ограничениями:

  • Теги ДОЛЖНЫ быть ограничены теми, которые разрешены набором правил схемы JSON.
  • Ключи, используемые в картах YAML, ДОЛЖНЫ быть ограничены скалярной строкой, как определено набором правил схемы YAML Failsafe.

Примечание: Хотя API могут быть определены документами OpenAPI в формате YAML или JSON, тела запроса и ответа API, а также другое содержимое не обязательно должны быть в формате JSON или YAML.

Структура документа

Документ OpenAPI МОЖЕТ состоять из одного документа или разделен на несколько связанных частей по усмотрению пользователя. В последнем случае Поля $ref ДОЛЖНЫ использоваться в спецификации для ссылки на эти части, как следует из определений схемы JSON.

РЕКОМЕНДУЕТСЯ, чтобы корневой документ OpenAPI имел имя: openapi.json или openapi.yaml .

Типы данных

Примитивные типы данных в OAS основаны на типах, поддерживаемых спецификацией схемы JSON Wright Draft 00. Обратите внимание, что целое число в качестве типа также поддерживается и определяется как число JSON без дробной или экспоненциальной части. null не поддерживается как тип (см. nullable для альтернативного решения). Модели определяются с помощью объекта схемы, который представляет собой расширенное подмножество спецификации схемы JSON Wright Draft 00.

Примитивы имеют необязательное свойство модификатора: формат . OAS использует несколько известных форматов для точного определения используемого типа данных. Однако для поддержки потребностей в документации свойство формата представляет собой открытую строку со значением и может иметь любое значение. Такие форматы, как "email" , "uuid" и т. д., МОГУТ использоваться, даже если они не определены этой спецификацией. Типы, которые не сопровождаются свойством формата формата , соответствуют определению типа в схеме JSON. Инструменты, которые не распознают определенный формат , МОГУТ по умолчанию вернуться к типу только , как если бы формат не был указан.

OAS определяет следующие форматы:

тип 9формат 0413 Комментарии
целое число инт32 со знаком 32 бита
целое число int64 подписанный 64-битный (длинный)
номер поплавок
номер двойной
строка
строка байт символов в кодировке base64
строка двоичный любая последовательность октетов
логическое значение
строка дата Как определено полная дата — RFC3339
строка дата-время Как определено дата-время — RFC3339
строка пароль Подсказка пользовательскому интерфейсу, чтобы скрыть ввод.

Расширенное форматирование текста

Во всей спецификации описания полей отмечены как поддерживающие форматирование уценки CommonMark. Там, где инструментарий OpenAPI отображает форматированный текст, он ДОЛЖЕН поддерживать, как минимум, синтаксис уценки, как описано в CommonMark 0.27. Инструментарий МОЖЕТ игнорировать некоторые функции CommonMark для решения проблем безопасности.

Относительные ссылки в URL-адресах

Если не указано иное, все свойства, являющиеся URL-адресами, МОГУТ быть относительными ссылками, как определено в RFC3986. Относительные ссылки разрешаются с использованием URL-адресов, определенных в объекте сервера в качестве базового URI.

Относительные ссылки, используемые в $ref , обрабатываются в соответствии со ссылкой JSON с использованием URL-адреса текущего документа в качестве базового URI. См. также Справочный объект.

Схема

В следующем описании, если поле не указано явно ТРЕБУЕТСЯ или описан как ДОЛЖЕН или СЛЕДУЕТ, его можно считать НЕОБЯЗАТЕЛЬНЫМ.

Объект OpenAPI

Это корневой объект документа OpenAPI.

Фиксированные поля
Имя поля Тип Описание
опенапи струна ТРЕБУЕТСЯ . Эта строка ДОЛЖНА быть семантическим номером версии спецификации OpenAPI, которую использует документ OpenAPI. 9Поле 0413 openapi СЛЕДУЕТ использовать спецификациям инструментов и клиентам для интерпретации документа OpenAPI. Это , а не , связанный со строкой API info.version .
информация Информационный объект ТРЕБУЕТСЯ . Предоставляет метаданные об API. Метаданные МОГУТ использоваться инструментами по мере необходимости.
серверы [Объект сервера] Массив серверных объектов, которые предоставляют информацию о подключении к целевому серверу. Если Свойство серверов не указано или представляет собой пустой массив, значением по умолчанию будет объект сервера со значением URL-адреса / .
путей Пути Объект ТРЕБУЕТСЯ . Доступные пути и операции для API.
компоненты Компоненты Объект Элемент для хранения различных схем спецификации.
безопасность [Объект требования безопасности] Объявление того, какие механизмы безопасности можно использовать в API. Список значений включает альтернативные объекты требований безопасности, которые можно использовать. Только один из объектов требования безопасности должен быть удовлетворен для авторизации запроса. Отдельные операции могут переопределить это определение. Чтобы сделать безопасность необязательной, в массив можно включить пустое требование безопасности ( {} ).
теги [Тег объекта] Список тегов, используемых спецификацией, с дополнительными метаданными. Порядок тегов можно использовать для отражения их порядка инструментами синтаксического анализа. Не все теги, которые используются объектом операции, должны быть объявлены. Теги, которые не объявлены, МОГУТ быть организованы случайным образом или на основе логики инструментов. Каждое имя тега в списке ДОЛЖНО быть уникальным.
внешние документы Объект внешней документации Дополнительная внешняя документация.

Этот объект МОЖЕТ быть расширен за счет расширений спецификации.

Информационный объект

Объект предоставляет метаданные об API. Метаданные МОГУТ использоваться клиентами при необходимости и МОГУТ быть представлены в инструментах редактирования или создания документации для удобства.

Фиксированные поля
Имя поля Тип Описание
название струна ТРЕБУЕТСЯ . Название API.
описание струна Краткое описание API. Синтаксис CommonMark МОЖЕТ использоваться для форматированного текстового представления.
условия обслуживания струна URL-адрес условий использования API. ДОЛЖЕН быть в формате URL.
контакт Контакт Объект Контактная информация для открытого API.
лицензия Объект лицензии Информация о лицензии для открытого API.
версия струна ТРЕБУЕТСЯ . Версия документа OpenAPI (отличная от версии спецификации OpenAPI или версии реализации API).

Этот объект МОЖЕТ быть расширен за счет расширений спецификаций.

Пример информационного объекта
 {
  "title": "Пример приложения для зоомагазина",
  "description": "Это пример сервера для зоомагазина.",
  "termsOfService": "http://example.com/terms/",
  "контакт": {
    "name": "Поддержка API",
    "url": "http://www. example.com/support",
    "электронная почта": "[email protected]"
  },
  "лицензия": {
    "имя": "Апач 2.0",
    "url": "https://www.apache.org/licenses/LICENSE-2.0.html"
  },
  "версия": "1.0.1"
}
 
 title: Образец приложения для зоомагазина
описание: Это пример сервера для зоомагазина.
Условия обслуживания: http://example.com/terms/
контакт:
  имя: Поддержка API
  URL-адрес: http://www.example.com/support
  электронная почта: [email protected]
лицензия:
  имя: Апач 2.0
  URL-адрес: https://www.apache.org/licenses/LICENSE-2.0.html.
версия: 1.0.1
 
Объект контакта

Контактная информация для открытого API.

Фиксированные поля
Имя поля Тип Описание
имя струна Идентификационное имя контактного лица/организации.
адрес струна URL-адрес, указывающий на контактную информацию. ДОЛЖЕН быть в формате URL.
электронная почта струна Адрес электронной почты контактного лица/организации. ДОЛЖЕН быть в формате адреса электронной почты.

Этот объект МОЖЕТ быть расширен за счет расширений спецификации.

Пример объекта контакта
 {
  "name": "Поддержка API",
  "url": "http://www.example.com/support",
  "электронная почта": "[email protected]"
}
 
 имя: Поддержка API
URL-адрес: http://www.example.com/support
электронная почта: [email protected]
 
Объект лицензии

Информация о лицензии для открытого API.

Фиксированные поля
Имя поля Тип Описание
имя струна ТРЕБУЕТСЯ . Имя лицензии, используемое для API.
адрес струна URL-адрес лицензии, используемой для API. ДОЛЖЕН быть в формате URL.

Этот объект МОЖЕТ быть расширен за счет расширений спецификации.

Пример объекта лицензии
 {
  "имя": "Апач 2.0",
  "url": "https://www.apache.org/licenses/LICENSE-2.0.html"
}
 
 имя: Apache 2.0
URL-адрес: https://www.apache.org/licenses/LICENSE-2.0.html.
 
Объект сервера

Объект, представляющий сервер.

Фиксированные поля
Имя поля Тип Описание
адрес струна ТРЕБУЕТСЯ . URL-адрес целевого хоста. Этот URL-адрес поддерживает серверные переменные и МОЖЕТ быть относительным, чтобы указать, что расположение хоста относится к местоположению, где обслуживается документ OpenAPI. Подстановки переменных будут сделаны, когда переменная названа в { скобки } .
описание струна Необязательная строка, описывающая хост, указанный URL-адресом. Синтаксис CommonMark МОЖЕТ использоваться для форматированного текстового представления.
переменные Карта [ строка , объект переменной сервера] Сопоставление между именем переменной и ее значением. Значение используется для подстановки в шаблоне URL-адреса сервера.

Этот объект МОЖЕТ быть расширен за счет расширений спецификации.

Пример объекта сервера

Отдельный сервер может быть описан как:

 {
  "url": "https://development.gigantic-server.com/v1",
  "description": "Сервер разработки"
}
 
 URL-адрес: https://development.gigantic-server.com/v1
описание: Сервер разработки
 

Ниже показано, как можно описать несколько серверов, например, серверы объекта OpenAPI :

 {
  "серверы": [
    {
      "url": "https://development.gigantic-server.com/v1",
      "description": "Сервер разработки"
    },
    {
      "url": "https://staging. gigantic-server.com/v1",
      "description": "Промежуточный сервер"
    },
    {
      "url": "https://api.gigantic-server.com/v1",
      "description": "Производственный сервер"
    }
  ]
}
 
 серверов:
- URL-адрес: https://development.gigantic-server.com/v1
  описание: Сервер разработки
- URL-адрес: https://staging.gigantic-server.com/v1
  описание: Промежуточный сервер
- URL-адрес: https://api.gigantic-server.com/v1
  описание: Рабочий сервер
 

Ниже показано, как можно использовать переменные для конфигурации сервера:

 {
  "серверы": [
    {
      "url": "https://{имя пользователя}.gigantic-server.com:{порт}/{базовый путь}",
      "description": "Производственный сервер API",
      "переменные": {
        "имя пользователя": {
          "по умолчанию": "демо",
          "description": "это значение назначается поставщиком услуг, в данном примере это `gigantic-server.com`"
        },
        "порт": {
          "перечисление": [
            "8443",
            "443"
          ],
          "по умолчанию": "8443"
        },
        "базовый путь": {
          "по умолчанию": "v2"
        }
      }
    }
  ]
}
 
 серверов:
- URL-адрес: https://{имя пользователя}. gigantic-server.com:{порт}/{базовый путь}
  описание: Рабочий сервер API
  переменные:
    имя пользователя:
      # примечание! отсутствие перечисления здесь означает, что это открытое значение
      по умолчанию: демо
      описание: это значение назначается поставщиком услуг, в данном примере это `gigantic-server.com`.
    порт:
      перечисление:
        - '8443'
        - «443»
      по умолчанию: '8443'
    базовый путь:
      # открытый означает, что есть возможность использовать специальные базовые пути, назначенные провайдером, по умолчанию `v2`
      по умолчанию: v2
 
Объект переменной сервера

Объект, представляющий переменную сервера для замены шаблона URL-адреса сервера.

Фиксированные поля
Имя поля Тип Описание
перечисление [ строка ] Перечисление строковых значений, которые следует использовать, если параметры замены относятся к ограниченному набору. Массив НЕ ДОЛЖЕН быть пустым.
по умолчанию струна ТРЕБУЕТСЯ . Значение по умолчанию, используемое для замены, которое ДОЛЖНО быть отправлено, если предоставлено альтернативное значение , а не . Обратите внимание, что это поведение отличается от обработки объектов схемы значений по умолчанию, потому что в этих случаях значения параметров являются необязательными. Если определено перечисление , значение ДОЛЖНО существовать в значениях перечисления.
описание струна Необязательное описание серверной переменной. Синтаксис CommonMark МОЖЕТ использоваться для форматированного текстового представления.

Этот объект МОЖЕТ быть расширен за счет расширений спецификации.

Компоненты Объект

Содержит набор многократно используемых объектов для различных аспектов OAS. Все объекты, определенные в объекте компонентов, не будут влиять на API, если на них явно не ссылаются свойства вне объекта компонентов.

Фиксированные поля
Имя поля Тип Описание
схемы Карта[ строка , Объект схемы | Справочный объект] Объект для хранения многократно используемых объектов схемы.
ответов Карта[ строка , Объект ответа | Справочный объект] Объект для хранения многократно используемых объектов ответа.
параметры Карта[ строка , объект параметра | Справочный объект] Объект для хранения повторно используемых объектов параметров.
примеры Карта[ строка , пример объекта | Справочный объект] Объект для хранения повторно используемых примеров объектов.
запросТело Карта[ строка , Объект тела запроса | Справочный объект] Объект для хранения повторно используемых объектов тела запроса.
коллекторы Карта[ строка , Объект заголовка | Справочный объект] Объект для хранения повторно используемых объектов заголовка.
Схемы безопасности Карта[ строка , Объект схемы безопасности | Справочный объект] Объект для хранения многократно используемых объектов схемы безопасности.
ссылки Карта[ строка , Объект ссылки | Справочный объект] Объект для хранения многоразовых объектов Link.
обратные вызовы Карта[ строка , Объект обратного вызова | Справочный объект] Объект для хранения повторно используемых объектов обратного вызова. 9[a-zA-Z0-9\.\-_]+$ .

Примеры имени поля:

 Пользователь
Пользователь_1
Имя пользователя
имя пользователя
my.org.Пользователь
 
Компоненты Пример объекта
 "компоненты": {
  "схемы": {
    "Общая ошибка": {
      "тип": "объект",
      "характеристики": {
        "код": {
          "тип": "целое",
          "формат": "int32"
        },
        "сообщение": {
          "тип": "строка"
        }
      }
    },
    "Категория": {
      "тип": "объект",
      "характеристики": {
        "я бы": {
          "тип": "целое",
          "формат": "int64"
        },
        "имя": {
          "тип": "строка"
        }
      }
    },
    "Ярлык": {
      "тип": "объект",
      "характеристики": {
        "я бы": {
          "тип": "целое",
          "формат": "int64"
        },
        "имя": {
          "тип": "строка"
        }
      }
    }
  },
  "параметры": {
    "скиппарам": {
      "имя": "пропустить",
      "в": "запрос",
      "description": "количество элементов для пропуска",
      «требуется»: правда,
      "схема": {
        "тип": "целое",
        "формат": "int32"
      }
    },
    "лимитПарам": {
      "имя": "лимит",
      "в": "запрос",
      "description": "максимальное количество возвращаемых записей",
      «требуется»: правда,
      "схема": {
        "тип": "целое",
        "формат": "int32"
      }
    }
  },
  "ответы": {
    "Не обнаружена": {
      "description": "Объект не найден. "
    },
    "Незаконный ввод": {
      "description": "Недопустимый ввод для операции."
    },
    "Общая ошибка": {
      "description": "Общая ошибка",
      "содержание": {
        "приложение/json": {
          "схема": {
            "$ref": "#/компоненты/схемы/Общая ошибка"
          }
        }
      }
    }
  },
  "Схемы безопасности": {
    "апи_ключ": {
      "тип": "апиКей",
      "имя": "api_key",
      "в": "заголовок"
    },
    "зоомагазин_auth": {
      "тип": "oauth3",
      "течет": {
        "скрытый": {
          "authorizationUrl": "http://example.org/api/oauth/dialog",
          "области": {
            "write:pets": "изменить питомцев в вашем аккаунте",
            "read:pets": "читать своих питомцев"
          }
        }
      }
    }
  }
}
 
 Компоненты:
  схемы:
    Общая ошибка:
      тип: объект
      характеристики:
        код:
          тип: целое число
          формат: int32
        сообщение:
          тип: строка
    Категория:
      тип: объект
      характеристики:
        я бы:
          тип: целое число
          формат: int64
        имя:
          тип: строка
    Ярлык:
      тип: объект
      характеристики:
        я бы:
          тип: целое число
          формат: int64
        имя:
          тип: строка
  параметры:
    пропуститьПарам:
      имя: пропустить
      в: запрос
      описание: количество элементов, которые нужно пропустить
      требуется: правда
      схема:
        тип: целое число
        формат: int32
    limitПарам:
      Название: лимит
      в: запрос
      описание: максимальное количество возвращаемых записей
      требуется: правда
      схема:
        тип: целое число
        формат: int32
  ответы:
    Не обнаружена:
      Описание: Объект не найден. 
    Незаконный ввод:
      Описание: Недопустимый ввод для операции.
    Общая ошибка:
      описание: Общая ошибка
      содержание:
        приложение/json:
          схема:
            $ref: '#/компоненты/схемы/Общая ошибка'
  схемы безопасности:
    ключ_апи:
      тип: апиКей
      имя: API_key
      в: заголовок
    зоомагазин_auth:
      тип: oauth3
      потоки:
        скрытый:
          URL-адрес авторизации: http://example.org/api/oauth/dialog
          области:
            write:pets: изменить питомцев в своей учетной записи
            read:pets: читай своих питомцев
 
Объект путей

Содержит относительные пути к отдельным конечным точкам и их операциям. Путь добавляется к URL-адресу из серверного объекта для создания полного URL-адреса. Пути МОГУТ быть пустыми из-за ограничений ACL.

Узорчатые поля
Узорчатые поля Тип Описание
/{путь} Объект элемента пути Относительный путь к отдельной конечной точке. Имя поля ДОЛЖНО начинаться с косой черты ( /). Путь — это , добавленный (без относительного разрешения URL-адреса) к расширенному URL-адресу из поля URL-адреса серверного объекта для создания полного URL-адреса. Шаблоны пути разрешены. При сопоставлении URL-адресов конкретные (не шаблонные) пути будут сопоставляться перед их шаблонными аналогами. Шаблонные пути с одинаковой иерархией, но разными шаблонными именами НЕ ДОЛЖНЫ существовать, поскольку они идентичны. В случае неоднозначного сопоставления инструменты должны решить, какой из них использовать.

Этот объект МОЖЕТ быть расширен за счет расширений спецификации.

Сопоставление шаблонов путей

Предполагая следующие пути, конкретное определение /pets/mine будет сопоставляться первым, если используется:

 /pets/{petId}
  /домашние животные/мой
 

Следующие пути считаются идентичными и недействительными:

 /pets/{petId}
  /имя питомца}
 

Следующее может привести к неоднозначному разрешению:

 /{entity}/me
  /книги/{id}
 
Пример объекта путей
 {
  "/домашние питомцы": {
    "получить": {
      "description": "Возвращает всех питомцев из системы, к которым у пользователя есть доступ",
      "ответы": {
        "200": {
          "description": "Список питомцев. ",
          "содержание": {
            "приложение/json": {
              "схема": {
                "тип": "массив",
                "Предметы": {
                  "$ref": "#/компоненты/схемы/животное"
                }
              }
            }
          }
        }
      }
    }
  }
}
 
 /домашние животные:
  получить:
    описание: Возвращает всех питомцев из системы, к которым у пользователя есть доступ
    ответы:
      «200»:
        описание: Список питомцев.
        содержание:
          приложение/json:
            схема:
              тип: массив
              Предметы:
                $ref: '#/компоненты/схемы/домашнее животное'
 
Объект элемента пути

Описывает операции, доступные на одном пути. Элемент пути МОЖЕТ быть пустым из-за ограничений ACL. Сам путь по-прежнему открыт для просмотра документации, но они не будут знать, какие операции и параметры доступны.

Фиксированные поля
Имя поля Тип Описание
$ref струна Позволяет внешнее определение этого элемента пути. Структура, на которую делается ссылка, ДОЛЖНА быть в формате объекта элемента пути. В случае, если поле Объект элемента пути появляется как в определенном объекте, так и в объекте, на который указывает ссылка, поведение не определено.
резюме строка Необязательная строковая сводка, предназначенная для применения ко всем операциям в этом пути.
описание струна Необязательное строковое описание, предназначенное для применения ко всем операциям в этом пути. Синтаксис CommonMark МОЖЕТ использоваться для форматированного текстового представления.
получить Операционный Объект Определение операции GET для этого пути.
положить Операционный Объект Определение операции PUT на этом пути.
пост Операционный Объект Определение операции POST на этом пути.
удалить Операционный Объект Определение операции DELETE на этом пути.
опции Операционный Объект Определение операции OPTIONS на этом пути.
головка Операционный Объект Определение операции HEAD на этом пути.
патч Операционный Объект Определение операции PATCH на этом пути.
след Операционный Объект Определение операции TRACE на этом пути.
серверы [Объект сервера] Альтернативный массив серверов для обслуживания всех операций по этому пути.
параметры [Объект параметра | Справочный объект] Список параметров, применимых ко всем операциям, описанным в этом пути. Эти параметры можно переопределить на уровне операции, но нельзя удалить там. Список НЕ ДОЛЖЕН включать повторяющиеся параметры. Уникальный параметр определяется комбинацией имени и местоположения. Список может использовать ссылочный объект для связи с параметрами, которые определены в компонентах/параметрах объекта OpenAPI.

Этот объект МОЖЕТ быть расширен за счет расширений спецификации.

Пример объекта элемента пути
 {
  "получить": {
    "description": "Возвращает питомцев по идентификатору",
    "summary": "Найти питомцев по ID",
    "operationId": "getPetsById",
    "ответы": {
      "200": {
        "description": "ответ питомца",
        "содержание": {
          "*/*": {
            "схема": {
              "тип": "массив",
              "Предметы": {
                "$ref": "#/компоненты/схемы/домашнее животное"
              }
            }
          }
        }
      },
      "дефолт": {
        "description": "полезная нагрузка ошибки",
        "содержание": {
          "текст/html": {
            "схема": {
              "$ref": "#/компоненты/схемы/ErrorModel"
            }
          }
        }
      }
    }
  },
  "параметры": [
    {
      "имя": "идентификатор",
      "в": "путь",
      "description": "ID питомца для использования",
      «требуется»: правда,
      "схема": {
        "тип": "массив",
        "Предметы": {
          "тип": "строка"
        }
      },
      "стиль": "простой"
    }
  ]
}
 
 получить:
  описание: Возвращает питомцев на основе ID
  резюме: Поиск домашних животных по идентификатору
  идентификатор операции: getPetsById
  ответы:
    «200»:
      описание: реакция питомца
      содержание:
        '*/*' :
          схема:
            тип: массив
            Предметы:
              $ref: '#/компоненты/схемы/домашнее животное'
    дефолт:
      описание: ошибка полезной нагрузки
      содержание:
        'текст/html':
          схема:
            $ref: '#/components/schemas/ErrorModel'
параметры:
- имя: идентификатор
  в: путь
  description: ID питомца для использования
  требуется: правда
  схема:
    тип: массив
    Предметы:
      тип: строка
  стиль: простой
 
Operation Object

Описывает одну операцию API на пути.

Фиксированные поля
Имя поля Тип Описание
теги [ строка ] Список тегов для управления документацией API. Теги могут использоваться для логической группировки операций по ресурсам или любому другому классификатору.
резюме струна Краткое описание того, что делает операция.
описание струна Подробное объяснение поведения операции. Синтаксис CommonMark МОЖЕТ использоваться для форматированного текстового представления.
внешние документы Объект внешней документации Дополнительная внешняя документация для этой операции.
идентификатор операции струна Уникальная строка, используемая для идентификации операции. Идентификатор ДОЛЖЕН быть уникальным среди всех операций, описанных в API. Значение OperationId равно 9.0016 с учетом регистра . Инструменты и библиотеки МОГУТ использовать идентификатор операции для уникальной идентификации операции, поэтому РЕКОМЕНДУЕТСЯ следовать общепринятым соглашениям об именах в программировании.
параметры [Объект параметра | Справочный объект] Список параметров, применимых для этой операции. Если параметр уже определен в элементе пути, новое определение переопределит его, но никогда не сможет удалить. Список НЕ ДОЛЖЕН включать повторяющиеся параметры. Уникальный параметр определяется комбинацией имени и местоположения. Список может использовать ссылочный объект для связи с параметрами, которые определены в компонентах/параметрах объекта OpenAPI.
запрос тела Объект тела запроса | Справочный объект Тело запроса, применимое к этой операции. requestBody поддерживается только в методах HTTP, где спецификация HTTP 1.1 RFC7231 явно определяет семантику для тела запроса. В других случаях, когда спецификация HTTP является расплывчатой, requestBody ДОЛЖЕН игнорироваться потребителями.
ответов Ответы Объект ТРЕБУЕТСЯ . Список возможных ответов в том виде, в каком они возвращаются при выполнении этой операции.
обратные вызовы Карта[ строка , Объект обратного вызова | Справочный объект] Карта возможных внеполосных обратных вызовов, связанных с родительской операцией. Ключ является уникальным идентификатором объекта обратного вызова. Каждое значение на карте — это объект обратного вызова, описывающий запрос, который может быть инициирован поставщиком API, и ожидаемые ответы.
устарело логическое значение Объявляет эту операцию устаревшей. Потребители ДОЛЖНЫ воздерживаться от использования объявленной операции. Значение по умолчанию: false .
безопасность [Объект требования безопасности] Объявление того, какие механизмы безопасности можно использовать для этой операции. Список значений включает альтернативные объекты требований безопасности, которые можно использовать. Только один из объектов требования безопасности должен быть удовлетворен для авторизации запроса. Чтобы сделать безопасность необязательной, пустое требование безопасности ( {} ) могут быть включены в массив. Это определение переопределяет любой объявленный уровень безопасности верхнего уровня . Чтобы удалить декларацию безопасности верхнего уровня, можно использовать пустой массив.
серверы [Объект сервера] Альтернативный серверный массив для обслуживания этой операции. Если альтернативный объект сервера указан на уровне объекта элемента пути или на корневом уровне, он будет переопределен этим значением.

Этот объект МОЖЕТ быть расширен за счет расширений спецификации.

Пример объекта операции
 {
  "метки": [
    "домашний питомец"
  ],
  "summary": "Обновляет питомца в магазине с данными формы",
  "operationId": "updatePetWithForm",
  "параметры": [
    {
      "имя": "идентификатор домашнего животного",
      "в": "путь",
      "description": "ID питомца, который необходимо обновить",
      «требуется»: правда,
      "схема": {
        "тип": "строка"
      }
    }
  ],
  "тело запроса": {
    "содержание": {
      "приложение/x-www-форма-urlencoded": {
        "схема": {
          "тип": "объект",
          "характеристики": {
            "имя": {
              "description": "Обновлено имя питомца",
              "тип": "строка"
            },
            "статус": {
              "description": "Обновлен статус питомца",
              "тип": "строка"
            }
          },
          "требуется": ["статус"]
        }
      }
    }
  },
  "ответы": {
    "200": {
      "description": "Питомец обновлен. ",
      "содержание": {
        "приложение/json": {},
        "приложение/xml": {}
      }
    },
    "405": {
      "description": "Метод не разрешен",
      "содержание": {
        "приложение/json": {},
        "приложение/xml": {}
      }
    }
  },
  "безопасность": [
    {
      "зоомагазин_аутент": [
        "написать: домашние животные",
        "читать: домашние животные"
      ]
    }
  ]
}
 
 теги:
- домашний питомец
резюме: Обновляет питомца в магазине с данными формы
идентификатор операции: updatePetWithForm
параметры:
- имя: petId
  в: путь
  description: ID питомца, который нужно обновить
  требуется: правда
  схема:
    тип: строка
тело запроса:
  содержание:
    'приложение/x-www-form-urlencoded':
      схема:
       характеристики:
          имя:
            описание: Обновлено имя питомца
            тип: строка
          статус:
            описание: Обновлен статус питомца
            тип: строка
       требуется:
         - статус
ответы:
  «200»:
    описание: Питомец обновлен. 
    содержание:
      'приложение/json': {}
      'приложение/xml': {}
  «405»:
    описание: Метод не разрешен
    содержание:
      'приложение/json': {}
      'приложение/xml': {}
безопасность:
- petstore_auth:
  - напиши: домашние животные
  - читать: домашние животные
 
Объект внешней документации

Позволяет ссылаться на внешний ресурс для получения расширенной документации.

Фиксированные поля
Имя поля Тип Описание
описание струна Краткое описание целевой документации. Синтаксис CommonMark МОЖЕТ использоваться для форматированного текстового представления.
адрес строка ТРЕБУЕТСЯ . URL целевой документации. Значение ДОЛЖНО быть в формате URL.

Этот объект МОЖЕТ быть расширен за счет расширений спецификации.

Пример объекта внешней документации
 {
  "description": "Подробнее здесь",
  "url": "https://example.com"
}
 
 описание: Подробнее здесь
адрес: https://example.com
 
Объект параметра

Описывает один рабочий параметр.

Уникальный параметр определяется комбинацией имени и местоположения.

Расположение параметров

Существует четыре возможных местоположения параметров, указанных в поле в поле :

  • путь — используется вместе с шаблоном пути, где значение параметра фактически является частью URL-адреса операции. Это не включает хост или базовый путь API. Например, в /items/{itemId} параметр пути равен itemId .
  • Запрос
  • — параметры, которые добавляются к URL-адресу. Например, в /items?id=### , параметр запроса id .
  • Заголовок
  • — настраиваемые заголовки, которые ожидаются как часть запроса. Обратите внимание, что RFC7230 указывает, что имена заголовков нечувствительны к регистру.
  • cookie — используется для передачи определенного значения cookie в API.
Фиксированные поля
Имя поля Тип Описание
имя струна ТРЕБУЕТСЯ . Имя параметра. Имена параметров чувствительны к регистру .
  • Если в является "путь" , поле имени ДОЛЖНО соответствовать выражению шаблона, встречающемуся в поле пути в объекте Paths. Дополнительную информацию см. в разделе Шаблоны путей.
  • Если в — это «заголовок» , а поле имени — это «Принять» , «Content-Type» или «Авторизация» , определение параметра ДОЛЖНО игнорироваться.
  • Во всех остальных случаях имя соответствует имени параметра, используемому свойством в .
в струна ТРЕБУЕТСЯ . Расположение параметра. Возможные значения: "запрос" , "заголовок" , "путь" или "cookie" .
описание строка Краткое описание параметра. Это может содержать примеры использования. Синтаксис CommonMark МОЖЕТ использоваться для форматированного текстового представления.
требуется логическое значение Определяет, является ли этот параметр обязательным. Если расположение параметра "path" , это свойство REQUIRED и его значение ДОЛЖНО быть true . В противном случае свойство МОЖЕТ быть включено, и его значение по умолчанию равно false .
устарело логическое значение Указывает, что параметр устарел и его СЛЕДУЕТ вывести из использования. Значение по умолчанию: false .
разрешить пустое значение логическое значение Устанавливает возможность передачи пустых параметров. Это действительно только для параметров запроса и позволяет отправлять параметр с пустым значением. Значение по умолчанию: false . Если используется стиль , и если поведение н/д (не может быть сериализовано), значение allowEmptyValue ДОЛЖНО игнорироваться. Использование этого свойства НЕ РЕКОМЕНДУЕТСЯ, так как оно может быть удалено в более поздних версиях.

Правила сериализации параметра задаются одним из двух способов. Для более простых сценариев схема и стиль могут описывать структуру и синтаксис параметра.

Имя поля Тип Описание
стиль струна Описывает сериализацию значения параметра в зависимости от типа значения параметра. Значения по умолчанию (на основе значения в ): для запрос - форма ; для путь - простой ; для заголовка - простой ; для cookie - форма .
взорвать логическое значение Когда это верно, значения параметров типа массива или объекта генерируют отдельные параметры для каждого значения массива или пары ключ-значение карты. Для других типов параметров это свойство не действует. Когда стиль равен форме , значением по умолчанию является true . Для всех остальных стилей значение по умолчанию — false .
разрешитьЗарезервировано логическое значение Определяет, СЛЕДУЕТ ли значение параметра разрешать включение зарезервированных символов, как определено в RFC3986 :/?#[]@!$&'()*+,;= , без процентного кодирования. Это свойство применяется только к параметрам со значением в запроса . Значение по умолчанию — false .
схема Объект схемы | Справочный объект Схема, определяющая тип, используемый для параметра.
пример Любой Пример потенциального значения параметра. Пример ДОЛЖЕН соответствовать указанной схеме и свойствам кодирования, если они есть. Поле примера является взаимоисключающим полем примеров . Кроме того, при ссылке на схему , которая содержит пример, значение примера ДОЛЖНО переопределять пример, предоставленный схемой. Чтобы представить примеры типов мультимедиа, которые не могут быть представлены естественным образом в JSON или YAML, строковое значение может содержать пример с экранированием, где это необходимо.
примеры Карта[ строка , пример объекта | Справочный объект] Примеры потенциального значения параметра. Каждый пример ДОЛЖЕН содержать значение в правильном формате, указанном в кодировке параметра. Поле примеров является взаимоисключающим полем примеров . Кроме того, при ссылке на схему , которая содержит пример, значение примеров ДОЛЖНО переопределять пример, предоставленный схемой.

Для более сложных сценариев свойство content может определять тип носителя и схему параметра. Параметр ДОЛЖЕН содержать либо свойство схемы , либо свойство содержимого , но не то и другое одновременно. Когда пример или примеры предоставляются вместе с объектом схемы , пример ДОЛЖЕН следовать предписанной стратегии сериализации для параметра.

Имя поля Тип Описание
содержание Карта [ строка , объект типа мультимедиа] Карта, содержащая представления параметра. Ключ — это тип носителя, а значение описывает его. Карта ДОЛЖНА содержать только одну запись.
Значения стиля

Для поддержки распространенных способов сериализации простых параметров определен набор значений стиля .

стиль тип в Комментарии
матрица примитив , массив , объект путь Параметры стиля пути, определенные RFC6570
этикетка примитив , массив , объект путь Параметры стиля метки, определенные RFC6570
форма примитив , массив , объект запрос , файл cookie Параметры стиля формы, определенные RFC6570. Этот параметр заменяет collectionFormat значением csv (когда explore имеет значение false) или multi (когда explore имеет значение true) из OpenAPI 2.0.
простой массив путь , заголовок Параметры простого стиля, определенные RFC6570. Этот параметр заменяет collectionFormat значением csv из OpenAPI 2.0.
пробел массив запрос Значения массива, разделенные пробелами. Этот параметр заменяет collectionFormat на ssv из OpenAPI 2.0.
труба с разделителями массив запрос Значения массива, разделенные вертикальной чертой. Этот параметр заменяет collectionFormat равным каналам из OpenAPI 2. 0.
ГлубокийОбъект объект запрос Обеспечивает простой способ визуализации вложенных объектов с использованием параметров формы.
Примеры стилей

Предположим, что параметр с именем color имеет одно из следующих значений:

 строка -> "синий"
   массив -> ["синий","черный","коричневый"]
   объект -> { "R": 100, "G": 200, "B": 150}
 

В следующей таблице показаны примеры различий в отображении для каждого значения.

стиль взорвать пустой струна массив объект
матрица ложь ;цвет ;цвет=синий ;цвет=синий,черный,коричневый ;цвет=R,100,G,200,B,150
матрица правда ;цвет ;цвет=синий ;цвет=синий;цвет=черный;цвет=коричневый ;R=100;G=200;B=150
этикетка ложь . .синий .синий.черный.коричневый .Р.100.Г.200.Б.150
этикетка правда . .синий .синий.черный.коричневый .R=100.G=200.B=150
форма ложь цвет = цвет=синий цвет=синий,черный,коричневый цвет=R,100,G,200,B,150
форма правда цвет = цвет=синий цвет=синий&цвет=черный&цвет=коричневый R=100&G=200&B=150
простой ложь н/д синий синий, черный, коричневый Р, 100, Г, 200, Б, 150
простой правда н/д синий синий, черный, коричневый Р=100,Г=200,В=150
пробел ложь н/д н/д синий%20черный%20коричневый Р%20100%20G%20200%20B%20150
труба с разделителями ложь н/д н/д синий|черный|коричневый Р|100|Г|200|В|150
ГлубокийОбъект правда н/д н/д н/д цвет[R]=100&цвет[G]=200&цвет[B]=150

Этот объект МОЖЕТ быть расширен за счет расширений спецификации.

Примеры объектов параметров

Параметр заголовка с массивом 64-битных целых чисел:

 {
  "имя": "токен",
  "в": "заголовок",
  "description": "токен для передачи в качестве заголовка",
  «требуется»: правда,
  "схема": {
    "тип": "массив",
    "Предметы": {
      "тип": "целое",
      "формат": "int64"
    }
  },
  "стиль": "простой"
}
 
 имя: токен
в: заголовок
описание: токен для передачи в качестве заголовка
требуется: правда
схема:
  тип: массив
  Предметы:
    тип: целое число
    формат: int64
стиль: простой
 

Параметр пути строкового значения:

 {
  "имя": "имя пользователя",
  "в": "путь",
  "description": "имя пользователя для извлечения",
  «требуется»: правда,
  "схема": {
    "тип": "строка"
  }
}
 
 имя: имя пользователя
в: путь
описание: имя пользователя для получения
требуется: правда
схема:
  тип: строка
 

Необязательный параметр запроса строкового значения, позволяющий использовать несколько значений путем повторения параметра запроса:

 {
  "имя": "идентификатор",
  "в": "запрос",
  "description": "ID объекта для извлечения",
  «требуется»: ложь,
  "схема": {
    "тип": "массив",
    "Предметы": {
      "тип": "строка"
    }
  },
  "стиль": "форма",
  "взорваться": правда
}
 
 имя: идентификатор
в: запрос
описание: ID объекта для выборки
требуется: ложь
схема:
  тип: массив
  Предметы:
    тип: строка
стиль: форма
взорваться: правда
 

Параметр запроса в произвольной форме, допускающий неопределенные параметры определенного типа:

 {
  "в": "запрос",
  "имя": "свободная форма",
  "схема": {
    "тип": "объект",
    "дополнительные свойства": {
      "тип": "целое число"
    },
  },
  "стиль": "форма"
}
 
 в: запрос
Название: FreeForm
схема:
  тип: объект
  дополнительные свойства:
    тип: целое число
стиль: форма
 

Сложный параметр, использующий содержимое для определения сериализации:

 {
  "в": "запрос",
  "имя": "координаты",
  "содержание": {
    "приложение/json": {
      "схема": {
        "тип": "объект",
        "требуется": [
          "лат",
          "длинная"
        ],
        "характеристики": {
          "лат": {
            "тип": "число"
          },
          "длинная": {
            "тип": "число"
          }
        }
      }
    }
  }
}
 
 в: запрос
имя: координаты
содержание:
  приложение/json:
    схема:
      тип: объект
      требуется:
        - лат
        - длинная
      характеристики:
        лат:
          тип: число
        длинная:
          тип: число
 
Объект тела запроса

Описывает одно тело запроса.

Фиксированные поля
Имя поля Тип Описание
описание строка Краткое описание тела запроса. Это может содержать примеры использования. Синтаксис CommonMark МОЖЕТ использоваться для форматированного текстового представления.
содержание Карта [ строка , объект типа мультимедиа] ТРЕБУЕТСЯ . Содержимое тела запроса. Ключ представляет собой тип носителя или диапазон типов носителя, а значение описывает его. Для запросов, соответствующих нескольким ключам, применим только самый конкретный ключ. например text/plain перекрывает текст/*
требуется логическое значение Определяет, требуется ли тело запроса в запросе. По умолчанию false .

Этот объект МОЖЕТ быть расширен за счет расширений спецификации.

Примеры тела запроса

Тело запроса с определением модели, на которую ссылаются.

 {
  "description": "пользователь для добавления в систему",
  "содержание": {
    "приложение/json": {
      "схема": {
        "$ref": "#/компоненты/схемы/пользователь"
      },
      "Примеры": {
          "пользователь" : {
            "summary": "Пример пользователя",
            "externalValue": "http://foo.bar/examples/user-example.json"
          }
        }
    },
    "приложение/xml": {
      "схема": {
        "$ref": "#/компоненты/схемы/пользователь"
      },
      "Примеры": {
          "пользователь" : {
            "summary": "Пример пользователя в XML",
            "externalValue": "http://foo.bar/examples/user-example.xml"
          }
        }
    },
    "текст/обычный": {
      "Примеры": {
        "пользователь" : {
            "summary": "Пример пользователя в текстовом формате",
            "externalValue": "http://foo.bar/examples/user-example.txt"
        }
      }
    },
    "*/*": {
      "Примеры": {
        "пользователь" : {
            "summary": "Пример пользователя в другом формате",
            "externalValue": "http://foo. bar/examples/user-example.whatever"
        }
      }
    }
  }
}
 
 описание: пользователь для добавления в систему
содержание:
  'приложение/json':
    схема:
      $ref: '#/компоненты/схемы/пользователь'
    Примеры:
      пользователь:
        резюме: пример пользователя
        externalValue: 'http://foo.bar/examples/user-example.json'
  'приложение/xml':
    схема:
      $ref: '#/компоненты/схемы/пользователь'
    Примеры:
      пользователь:
        резюме: Пример пользователя в XML
        externalValue: 'http://foo.bar/examples/user-example.xml'
  'текст/обычный':
    Примеры:
      пользователь:
        резюме: пример пользователя в текстовом формате
        externalValue: 'http://foo.bar/examples/user-example.txt'
  '*/*':
    Примеры:
      пользователь:
        резюме: пример пользователя в другом формате
        externalValue: 'http://foo.bar/examples/user-example.whatever'
 

Основной параметр, представляющий собой массив строковых значений:

 {
  "description": "пользователь для добавления в систему",
  "содержание": {
    "текст/обычный": {
      "схема": {
        "тип": "массив",
        "Предметы": {
          "тип": "строка"
        }
      }
    }
  }
}
 
 описание: пользователь для добавления в систему
требуется: правда
содержание:
  текст/обычный:
    схема:
      тип: массив
      Предметы:
        тип: строка
 
Объект типа носителя

Каждый объект типа носителя предоставляет схему и примеры для типа носителя, определяемого его ключом.

Фиксированные поля
Имя поля Тип Описание
схема Объект схемы | Справочный объект Схема, определяющая содержимое запроса, ответа или параметра.
пример Любой Пример типа носителя. Образец объекта ДОЛЖЕН быть в правильном формате, указанном типом носителя. Поле примера является взаимоисключающим полем 9.0413 примеров поле. Кроме того, при ссылке на схему , содержащую пример, значение примера ДОЛЖНО переопределять пример, предоставленный схемой.
примеры Карта[ строка , пример объекта | Справочный объект] Примеры типа носителя. Каждый пример объекта ДОЛЖЕН соответствовать типу носителя и указанной схеме, если она присутствует. Поле примеров является взаимоисключающим полем пример поле. Кроме того, при ссылке на схему , которая содержит пример, значение примеров ДОЛЖНО переопределять пример, предоставленный схемой.
кодирование Карта [ строка , объект кодирования] Сопоставление между именем свойства и информацией о его кодировке. Ключ, являющийся именем свойства, ДОЛЖЕН существовать в схеме как свойство. Объект кодирования ДОЛЖЕН применяться только к requestBody , когда тип мультимедиа multipart или application/x-www-form-urlencoded .

Этот объект МОЖЕТ быть расширен за счет расширений спецификации.

Примеры типов носителей
 {
  "приложение/json": {
    "схема": {
         "$ref": "#/компоненты/схемы/домашнее животное"
    },
    "Примеры": {
      "кошка" : {
        "summary": "Пример кота",
        "ценность":
          {
            "имя": "Пушистый",
            "petType": "Кошка",
            "белый цвет",
            "мужской пол",
            "порода": "персидская"
          }
      },
      "собака": {
        "summary": "Пример собаки с кошачьим именем",
        "ценность" :  {
          "имя": "Пума",
          "petType": "Собака",
          "черный цвет",
          "женский пол",
          "порода": "Смешанная"
        },
      "лягушка": {
          "$ref": "#/компоненты/примеры/пример-лягушки"
        }
      }
    }
  }
}
 
 приложение/json:
  схема:
    $ref: "#/компоненты/схемы/домашнее животное"
  Примеры:
    кошка:
      Резюме: Пример кота
      ценность:
        имя: Пушистый
        petType: Кошка
        белый цвет
        мужской пол
        порода: персидская
    собака:
      резюме: Пример собаки с кошачьим именем
      ценность:
        имя: Пума
        petType: Собака
        черный цвет
        женский пол
        порода: смешанная
    лягушка:
      $ref: "#/компоненты/примеры/пример-лягушки"
 
Рекомендации по загрузке файлов

В отличие от спецификации 2. 0, файл входное/выходное содержимое в OpenAPI описывается той же семантикой, что и любой другой тип схемы. В частности:

 # контент, переданный с кодировкой base64
схема:
  тип: строка
  формат: base64
 
 # содержимое передается в двоичном виде (октетный поток):
схема:
  тип: строка
  формат: бинарный
 

Эти примеры относятся либо к входным полезным нагрузкам загрузки файлов, либо к полезным нагрузкам ответов.

requestBody для отправки файла в операции POST может выглядеть следующим образом:

 requestBody:
  содержание:
    приложение/октетный поток:
      схема:
        # бинарный файл любого типа
        тип: строка
        формат: бинарный
 

Кроме того, МОГУТ быть указаны определенные типы носителей:

 # несколько, могут быть указаны определенные типы носителей:
тело запроса:
  содержание:
      # бинарный файл типа png или jpeg
    'изображение/jpeg':
      схема:
        тип: строка
        формат: бинарный
    'изображение/png':
      схема:
        тип: строка
        формат: бинарный
 

Для загрузки нескольких файлов ДОЛЖЕН использоваться тип мультимедиа multipart :

 requestBody:
  содержание:
    составные/данные формы:
      схема:
        характеристики:
          # Имя свойства 'file' будет использоваться для всех файлов. 
          файл:
            тип: массив
            Предметы:
              тип: строка
              формат: бинарный
 
Поддержка тела запроса x-www-form-urlencoded

можно использовать определение:

 тело запроса:
  содержание:
    приложение/x-www-форма-urlencoded:
      схема:
        тип: объект
        характеристики:
          я бы:
            тип: строка
            формат: UUID
          адрес:
            # сложные типы преобразуются в строки для поддержки RFC 1866
            тип: объект
            характеристики: {}
 

В этом примере содержимое requestBody ДОЛЖНО быть преобразовано в строку в соответствии с RFC1866 при передаче на сервер. Кроме того, комплексный объект поля адреса будет преобразован в строку.

При передаче сложных объектов в типе контента application/x-www-form-urlencoded стратегия сериализации таких свойств по умолчанию описана в свойстве Encoding Object в стиле как form .

Особые соображения для
multipart Content

Обычно используется multipart/form-data в качестве Content-Type при передаче тела запроса в операции. В отличие от 2.0, схема ТРЕБУЕТСЯ для определения входных параметров операции при использовании составного содержимого . Это поддерживает сложные структуры, а также поддерживает механизмы для загрузки нескольких файлов.

При передаче типов multipart границы МОГУТ использоваться для разделения разделов передаваемого контента — таким образом, для multipart определены следующие значения по умолчанию Content-Type :

  • Если свойство является примитивным , или массив примитивных значений, Content-Type по умолчанию равен текстовый/обычный
  • Если свойство является сложным или представляет собой массив сложных значений, Content-Type по умолчанию — application/json
  • Если свойство имеет тип : строка с форматом : двоичный формат или формат : base64 (также известный как файловый объект), Content-Type по умолчанию — application/octet-stream

Примеры:

 requestBody:
  содержание:
    составные/данные формы:
      схема:
        тип: объект
        характеристики:
          я бы:
            тип: строка
            формат: UUID
          адрес:
            # Content-Type по умолчанию для объектов - `application/json`
            тип: объект
            характеристики: {}
          изображение профиля:
            # Content-Type по умолчанию для строки/двоичного файла: `application/octet-stream`
            тип: строка
            формат: бинарный
          дети:
            # Content-Type по умолчанию для массивов основан на `внутреннем` типе (здесь text/plain)
            тип: массив
            Предметы:
              тип: строка
          адреса:
            # Content-Type по умолчанию для массивов основан на `внутреннем` типе (показан объект, поэтому в этом примере `application/json`)
            тип: массив
            Предметы:
              тип: '#/компоненты/схемы/адрес'
 

Атрибут , кодирующий , введен для предоставления вам контроля над сериализацией частей составных тел запросов . Этот атрибут только применим к multipart и application/x-www-form-urlencoded тел запроса.

Объект кодирования

Одно определение кодирования, примененное к одному свойству схемы.

Фиксированные поля
Имя поля Тип Описание
тип содержимого струна Content-Type для кодирования определенного свойства. Значение по умолчанию зависит от типа свойства: для строка с форматом является бинарным приложение/октет-поток ; для остальных типов примитивов — text/plain ; для объекта - application/json ; для массива – значение по умолчанию определяется на основе внутреннего типа. Значение может быть конкретным типом носителя (например, application/json ), тип мультимедиа с подстановочными знаками (например, image/* ) или список двух типов, разделенных запятыми.
коллекторы Карта[ строка , Объект заголовка | Справочный объект] Карта, позволяющая предоставлять дополнительную информацию в виде заголовков, например Content-Disposition . Content-Type описывается отдельно и ДОЛЖЕН быть проигнорирован в этом разделе. Это свойство ДОЛЖНО игнорироваться, если тип носителя тела запроса не является составной .
стиль струна Описывает, как определенное значение свойства будет сериализовано в зависимости от его типа. Подробнее о свойстве стиля см. в разделе Объект параметра. Поведение соответствует тем же значениям, что и параметры запроса , включая значения по умолчанию. Это свойство ДОЛЖНО игнорироваться, если тип носителя тела запроса отличается от application/x-www-form-urlencoded .
взорвать логическое значение Когда это верно, значения свойства типа массива или объекта генерируют отдельные параметры для каждого значения массива или пары ключ-значение карты. Для других типов свойств это свойство не действует. Когда стиль равен форме , значением по умолчанию является true . Для всех остальных стилей значение по умолчанию — false . Это свойство ДОЛЖНО игнорироваться, если тип носителя тела запроса не равен 9.0413 приложение/x-www-form-urlencoded .
разрешитьЗарезервировано логическое значение Определяет, СЛЕДУЕТ ли значение параметра разрешать включение зарезервированных символов, как определено в RFC3986 :/?#[]@!$&'()*+,;= , без процентного кодирования. Значение по умолчанию — false . Это свойство ДОЛЖНО игнорироваться, если тип носителя тела запроса отличается от application/x-www-form-urlencoded .

Этот объект МОЖЕТ быть расширен за счет расширений спецификации.

Пример объекта кодирования
 requestBody:
  содержание:
    составной/смешанный:
      схема:
        тип: объект
        характеристики:
          я бы:
            # по умолчанию текстовый/обычный
            тип: строка
            формат: UUID
          адрес:
            # по умолчанию это приложение/json
            тип: объект
            характеристики: {}
          историяМетаданные:
            # нужно объявить формат XML!
            описание: метаданные в формате XML
            тип: объект
            характеристики: {}
          изображение профиля:
            # по умолчанию используется application/octet-stream, необходимо объявить только тип изображения!
            тип: строка
            формат: бинарный
      кодировка:
        историяМетаданные:
          # требуется XML Content-Type в кодировке utf-8
          ContentType: приложение/xml; кодировка = utf-8
        изображение профиля:
          # принимаем только png/jpeg
          contentType: изображение/png, изображение/jpeg
          заголовки:
            X-Rate-Limit-Limit:
              описание: Количество разрешенных запросов в текущем периоде
              схема:
                тип: целое число
 
Responses Object

Контейнер для ожидаемых ответов операции. Контейнер сопоставляет код ответа HTTP с ожидаемым ответом.

Документация не обязательно должна охватывать все возможные коды ответов HTTP, поскольку они могут быть неизвестны заранее. Однако ожидается, что документация будет охватывать успешный ответ операции и любые известные ошибки.

по умолчанию МОЖЕТ использоваться в качестве объекта ответа по умолчанию для всех кодов HTTP которые не рассматриваются отдельно в спецификации.

Объект ответов ДОЛЖЕН содержать по крайней мере один код ответа, и он ДОЛЖЕН быть ответом на успешный вызов операции.

Фиксированные поля
Имя поля Тип Описание
по умолчанию Объект ответа | Справочный объект Документация ответов, отличных от заявленных для конкретных кодов ответов HTTP. Используйте это поле для покрытия необъявленных ответов. Справочный объект может ссылаться на ответ, который определяется в разделе компонентов/ответов объекта OpenAPI.
Узорчатые поля
Узорчатые поля Тип Описание
Код состояния HTTP Объект ответа | Справочный объект В качестве имени свойства можно использовать любой код состояния HTTP, но только одно свойство на код, чтобы описать ожидаемый ответ для этого кода состояния HTTP. Справочный объект может ссылаться на ответ, определенный в разделе компонентов/ответов объекта OpenAPI. Это поле ДОЛЖНО быть заключено в кавычки (например, «200») для совместимости между JSON и YAML. Чтобы определить диапазон кодов ответа, это поле МОЖЕТ содержать подстановочный знак 9 в верхнем регистре.0413 х . Например, 2XX представляет все коды ответа между [200-299] . Допускаются только следующие определения диапазона: 1XX , 2XX , 3XX , 4XX и 5XX . Если ответ определен с использованием явного кода, явное определение кода имеет приоритет над определением диапазона для этого кода.

Этот объект МОЖЕТ быть расширен за счет расширений спецификации.

Ответы Пример объекта

Ответ 200 для успешной операции и ответ по умолчанию для других (подразумевающий ошибку):

 {
  "200": {
    "description": "животное, которое нужно вернуть",
    "содержание": {
      "приложение/json": {
        "схема": {
          "$ref": "#/компоненты/схемы/домашнее животное"
        }
      }
    }
  },
  "дефолт": {
    "description": "Непредвиденная ошибка",
    "содержание": {
      "приложение/json": {
        "схема": {
          "$ref": "#/компоненты/схемы/ErrorModel"
        }
      }
    }
  }
}
 
 '200':
  описание: домашнее животное, которое нужно вернуть
  содержание:
    приложение/json:
      схема:
        $ref: '#/компоненты/схемы/домашнее животное'
дефолт:
  описание: Непредвиденная ошибка
  содержание:
    приложение/json:
      схема:
        $ref: '#/components/schemas/ErrorModel'
 
Response Object

Описывает один ответ от операции API, включая время разработки, статический связывает с операциями на основе ответа.

Фиксированные поля
Имя поля Тип Описание
описание струна ТРЕБУЕТСЯ . Краткое описание ответа. Синтаксис CommonMark МОЖЕТ использоваться для форматированного текстового представления.
коллекторы Карта[ строка , Объект заголовка | Справочный объект] Сопоставляет имя заголовка с его определением. RFC7230 указывает, что имена заголовков нечувствительны к регистру. Если заголовок ответа определен с именем "Content-Type" , его ДОЛЖНО игнорировать.
содержание Карта [ строка , объект типа мультимедиа] Карта, содержащая описания потенциальных полезных данных ответа. Ключ представляет собой тип носителя или диапазон типов носителя, а значение описывает его. Для ответов, соответствующих нескольким ключам, применим только самый конкретный ключ. например text/plain переопределяет text/*
ссылки Карта[ строка , Объект ссылки | Справочный объект] Карта ссылок операций, по которым можно перейти из ответа. Ключ карты — это короткое имя для ссылки, соответствующее ограничениям именования имен для объектов-компонентов.

Этот объект МОЖЕТ быть расширен за счет расширений спецификации.

Примеры объектов ответа

Ответ массива сложного типа:

 {
  "description": "Ответ сложного массива объектов",
  "содержание": {
    "приложение/json": {
      "схема": {
        "тип": "массив",
        "Предметы": {
          "$ref": "#/компоненты/схемы/VeryComplexType"
        }
      }
    }
  }
}
 
 описание: Ответ массива сложных объектов
содержание:
  приложение/json:
    схема:
      тип: массив
      Предметы:
        $ref: '#/компоненты/схемы/VeryComplexType'
 

Ответ строкового типа:

 {
  "description": "Простой строковый ответ",
  "содержание": {
    "текст/обычный": {
      "схема": {
        "тип": "строка"
      }
    }
  }
}
 
 описание: Простой строковый ответ
содержание:
  текст/обычный:
    схема:
      тип: строка
 

Простой текстовый ответ с заголовками:

 {
  "description": "Простой строковый ответ",
  "содержание": {
    "текст/обычный": {
      "схема": {
        "тип": "строка",
        "пример": "вау!"
      }
    }
  },
  "заголовки": {
    "Ограничение скорости X-предела": {
      "description": "Количество разрешенных запросов в текущем периоде",
      "схема": {
        "тип": "целое число"
      }
    },
    "X-Rate-Limit-Remaining": {
      "description": "Количество оставшихся запросов в текущем периоде",
      "схема": {
        "тип": "целое число"
      }
    },
    "X-Rate-Limit-Reset": {
      "description": "Количество секунд, оставшихся до конца текущего периода",
      "схема": {
        "тип": "целое число"
      }
    }
  }
}
 
 описание: Простой строковый ответ
содержание:
  текст/обычный:
    схема:
      тип: строка
    пример: "уоу!"
заголовки:
  X-Rate-Limit-Limit:
    описание: Количество разрешенных запросов в текущем периоде
    схема:
      тип: целое число
  X-Rate-Limit-Remaining:
    описание: количество оставшихся запросов в текущем периоде
    схема:
      тип: целое число
  X-Rate-Limit-Reset:
    описание: Количество секунд, оставшихся в текущем периоде
    схема:
      тип: целое число
 

Ответ без возвращаемого значения:

 {
  "description": "объект создан"
}
 
 описание: объект создан
 
Объект обратного вызова

Карта возможных внеполосных обратных вызовов, связанных с родительской операцией. Каждое значение на карте представляет собой объект элемента пути, описывающий набор запросов, которые могут быть инициированы поставщиком API, и ожидаемые ответы. Ключевое значение, используемое для идентификации объекта элемента пути, представляет собой выражение, оцениваемое во время выполнения и идентифицирующее URL-адрес, используемый для операции обратного вызова.

Узорчатые поля
Узорчатые поля Тип Описание
{выражение} Объект элемента пути Объект элемента пути, используемый для определения запроса обратного вызова и ожидаемых ответов. Полный пример доступен.

Этот объект МОЖЕТ быть расширен за счет расширений спецификации.

Выражение ключа

Ключ, идентифицирующий объект элемента пути, представляет собой выражение времени выполнения, которое можно оценить в контексте HTTP-запроса/ответа времени выполнения для определения URL-адреса, который будет использоваться для запроса обратного вызова. Простым примером может быть $request.body#/url . Однако с помощью выражения времени выполнения можно получить доступ к полному сообщению HTTP. Это включает в себя доступ к любой части тела, на которую может ссылаться указатель JSON RFC6901.

Например, для следующего HTTP-запроса:

 POST /subscribe/myevent?queryUrl=http://clientdomain.com/stillrunning HTTP/1.1
Хост: example.org
Тип содержимого: приложение/json
Длина контента: 187
{
  "failedUrl": "http://clientdomain.com/failed",
  "URL-адреса успеха": [
    "http://clientdomain.com/fast",
    "http://clientdomain.com/medium",
    "http://clientdomain.com/slow"
  ]
}
201 Создано
Расположение: http://example.org/subscription/1.
 

В следующих примерах показано, как оцениваются различные выражения, при условии, что операция обратного вызова имеет параметр пути с именем eventType и параметр запроса с именем queryUrl .

Выражение Значение
URL-адрес $ http://example. org/subscribe/myevent?queryUrl=http://clientdomain.com/stillrunning
$метод ПОСТ
$request.path.eventType мое событие
$request.query.queryUrl http://clientdomain.com/stillrunning
$request.header.content-Type приложение/json
$request.body#/failedUrl http://clientdomain.com/failed
$request.body#/successUrls/2 http://clientdomain.com/medium
$response.header.Расположение http://example.org/subscription/1
Примеры объектов обратного вызова

В следующем примере используется предоставленный пользователем параметр строки запроса queryUrl для определения URL-адреса обратного вызова. Это пример того, как использовать объект обратного вызова для описания обратного вызова WebHook, который идет с операцией подписки, чтобы включить регистрацию для WebHook.

 мойОбратный звонок:
  '{$request.query.queryUrl}':
    почта:
      тело запроса:
        описание: Полезная нагрузка обратного вызова
        содержание:
          'приложение/json':
            схема:
              $ref: '#/компоненты/схемы/SomePayload'
      ответы:
        «200»:
          описание: обратный вызов успешно обработан
 

В следующем примере показан обратный вызов, в котором сервер жестко запрограммирован, но параметры строки запроса заполняются из свойств id и email в тексте запроса.

 транзакцияОбратный звонок:
  'http://notificationServer.com?transactionId={$request.body#/id}&email={$request.body#/email}':
    почта:
      тело запроса:
        описание: Полезная нагрузка обратного вызова
        содержание:
          'приложение/json':
            схема:
              $ref: '#/компоненты/схемы/SomePayload'
      ответы:
        «200»:
          описание: обратный вызов успешно обработан
 
Пример объекта
Фиксированные поля
Имя поля Тип Описание
резюме струна Краткое описание примера.
описание струна Подробное описание примера. Синтаксис CommonMark МОЖЕТ использоваться для форматированного текстового представления.
значение Любой Пример встроенного литерала. Поле значения и поле externalValue являются взаимоисключающими. Чтобы представить примеры типов мультимедиа, которые не могут быть представлены естественным образом в JSON или YAML, используйте строковое значение, содержащее пример, с экранированием, где это необходимо.
внешнее значение струна URL-адрес, указывающий на буквальный пример. Это дает возможность ссылаться на примеры, которые нелегко включить в документы JSON или YAML. 9Поле 0413 value и поле externalValue являются взаимоисключающими.

Этот объект МОЖЕТ быть расширен за счет расширений спецификации.

Во всех случаях ожидается, что значение примера будет совместимо со схемой типа связанной с ним стоимости. Инструментальные реализации МОГУТ выбрать автоматически проверять совместимость и отклонять примеры значений, если они несовместимы.

Пример Примеры объектов

В теле запроса:

 запростело:
  содержание:
    'приложение/json':
      схема:
        $ref: '#/компоненты/схемы/адрес'
      Примеры:
        фу:
          резюме: пример foo
          значение: {"foo": "бар"}
        бар:
          резюме: пример бара
          значение: {"бар": "баз"}
    'приложение/xml':
      Примеры:
        xmlПример:
          резюме: это пример в XML
          externalValue: 'http://example.org/examples/address-example.xml'
    'текст/обычный':
      Примеры:
        текстПример:
          резюме: Это текстовый пример
          externalValue: 'http://foo.bar/examples/address-example.txt'
 

В параметре:

 параметры:
  - имя: 'zipCode'
    в: 'запрос'
    схема:
      тип: 'строка'
      формат: 'почтовый индекс'
    Примеры:
      zip-пример:
        $ref: '#/компоненты/примеры/zip-пример'
 

В ответ:

 ответов:
  «200»:
    описание: ваша автомобильная встреча была забронирована
    содержание:
      приложение/json:
        схема:
          $ref: '#/компоненты/схемы/SuccessResponse'
        Примеры:
          подтверждение-успех:
            $ref: '#/компоненты/примеры/подтверждение успеха'
 
Link Object

Link Object представляет возможную ссылку времени разработки для ответа. Наличие ссылки не гарантирует, что вызывающая сторона сможет успешно вызвать ее, а скорее обеспечивает известную взаимосвязь и механизм обхода между ответами и другими операциями.

В отличие от динамических ссылок (т. е. ссылок, предоставленных в полезной нагрузке ответа), механизм связывания OAS не требует информации о ссылке в ответе во время выполнения.

Для вычисления ссылок и предоставления инструкций по их выполнению выражение времени выполнения используется для доступа к значениям в операции и использования их в качестве параметров при вызове связанной операции.

Фиксированные поля
Имя поля Тип Описание
эксплуатацияRef струна Относительная или абсолютная ссылка URI на операцию OAS. Это поле является взаимоисключающим из operationId и ДОЛЖЕН указывать на объект операции. Относительные значения operationRef МОГУТ использоваться для обнаружения существующего объекта операции в определении OpenAPI.
идентификатор операции струна Имя существующей разрешимой операции OAS, определенной с помощью уникального идентификатора операции . Это поле является взаимоисключающим полем operationRef .
параметры Карта[ строка , Любой | {выражение}] Карта, представляющая параметры для передачи в операцию, указанную с помощью operationId или идентифицированную с помощью operationRef . Ключ — это имя используемого параметра, тогда как значение может быть константой или выражением, которое нужно вычислить и передать в связанную операцию. Имя параметра можно уточнить, используя расположение параметра [{in}.]{name} для операций, использующих одно и то же имя параметра в разных местах (например, path.id).
запрос тела Любой | {выражение} Буквенное значение или {выражение} для использования в качестве тела запроса при вызове целевой операции.
описание струна Описание ссылки. Синтаксис CommonMark МОЖЕТ использоваться для форматированного текстового представления.
сервер Объект сервера Объект сервера, который будет использоваться целевой операцией.

Этот объект МОЖЕТ быть расширен за счет расширений спецификаций.

Связанная операция ДОЛЖНА быть идентифицирована с помощью operationRef или operationId . В случае operationId он ДОЛЖЕН быть уникальным и разрешаться в рамках документа OAS. Из-за возможного конфликта имен предпочтительным является синтаксис operationRef . для спецификаций с внешними ссылками.

Примеры

Вычисление ссылки из операции запроса, где $request.path.id используется для передачи параметра запроса связанной операции.

 путей:
  /пользователи/{идентификатор}:
    параметры:
    - имя: идентификатор
      в: путь
      требуется: правда
      описание: идентификатор пользователя, как userId
      схема:
        тип: строка
    получить:
      ответы:
        «200»:
          описание: возвращаемый пользователь
          содержание:
            приложение/json:
              схема:
                тип: объект
                характеристики:
                  uuid: # уникальный идентификатор пользователя
                    тип: строка
                    формат: UUID
          ссылки:
            адрес:
              # идентификатор операции целевой ссылки
              идентификатор операции: getUserAddress
              параметры:
                # получить поле `id` из параметра пути запроса с именем `id`
                идентификатор пользователя: $ request. path.id
  # элемент пути связанной операции
  /users/{идентификатор пользователя}/адрес:
    параметры:
    - имя: идентификатор пользователя
      в: путь
      требуется: правда
      описание: идентификатор пользователя, как userId
      схема:
        тип: строка
    # связанная операция
    получить:
      идентификатор операции: getUserAddress
      ответы:
        «200»:
          описание: адрес пользователя
 

Если выражение среды выполнения не может быть оценено, в целевую операцию не передается значение параметра.

Значения из тела ответа можно использовать для управления связанной операцией.

 ссылки:
  адрес:
    идентификатор операции: getUserAddressByUUID
    параметры:
      # получить поле `uuid` из поля `uuid` в теле ответа
      userUuid: $response.body#/uuid
 

Клиенты переходят по всем ссылкам на свое усмотрение. Ни разрешения, ни возможность сделать успешный вызов по этой ссылке не гарантируются. исключительно наличием отношений.

OperationRef Примеры

Поскольку ссылки на operationId МОГУТ НЕ ВОЗМОЖНЫ ( operationId является необязательным поле в объекте операции), ссылки МОГУТ также быть сделаны через относительные ссылки operationRef :

:
  Пользовательские репозитории:
    # возвращает массив '#/components/schemas/repository'
    OperationRef: '#/paths/~12. 0~1repositories~1{username}/get'
    параметры:
      имя пользователя: $response.body#/имя пользователя
 

или абсолютная OperationRef :

 ссылки:
  Пользовательские репозитории:
    # возвращает массив '#/components/schemas/repository'
    OperationRef: 'https://na2.gigantic-server.com/#/paths/~12.0~1repositories~1{username}/get'
    параметры:
      имя пользователя: $response.body#/имя пользователя
 

Обратите внимание, что при использовании operationRef экранированная косая черта необходима, когда используя ссылки JSON.

Выражения среды выполнения

Выражения среды выполнения позволяют определять значения на основе информации, которая будет доступна только в HTTP-сообщении при фактическом вызове API. Этот механизм используется объектами Link и Callback Objects.

Выражение среды выполнения определяется следующим синтаксисом ABNF

 выражение = ( "$url" / "$method" / "$statusCode" / "$request. " / "_" / "`" / "|" / "~" / ЦИФРА / АЛЬФА
 

Здесь json-pointer взят из RFC 6901, char из RFC 7159 и токен из RFC 7230.

В таблице ниже приведены примеры выражений времени выполнения и примеры их использования в значении:

Примеры
Исходное местоположение пример выражения отмечает
Метод HTTP $метод Допустимые значения для $method будут такими же, как и для операции HTTP.
Запрошенный тип носителя $request.header.accept
Параметр запроса $request.path.id Параметры запроса ДОЛЖНЫ быть объявлены в разделе параметров родительской операции, иначе они не могут быть оценены. Сюда входят заголовки запросов.
Свойство тела запроса $request. body#/пользователь/uuid В операциях, которые принимают полезные нагрузки, могут быть сделаны ссылки на части requestBody или все тело.
URL запроса $ URL
Значение ответа $response.body#/статус В операциях, которые возвращают полезные данные, могут быть сделаны ссылки на части тела ответа или на все тело.
Заголовок ответа $response.header.Сервер Доступны только отдельные значения заголовка

Выражения среды выполнения сохраняют тип значения, на которое указывает ссылка. Выражения можно встраивать в строковые значения, окружая выражение фигурными скобками {} .

Объект заголовка повторяет структуру объекта параметров со следующими изменениями:

  1. имя НЕ ДОЛЖНО указываться, оно указывается в соответствующем заголовки карта.
  2. в НЕ ДОЛЖНО быть указано, это неявно в заголовке .
  3. Все черты, на которые влияет местоположение, ДОЛЖНЫ быть применимы к местоположению заголовка (например, стиль ).

Простой заголовок типа целое число :

 {
  "description": "Количество разрешенных запросов в текущем периоде",
  "схема": {
    "тип": "целое число"
  }
}
 
Описание
: Количество разрешенных запросов в текущем периоде
схема:
  тип: целое число
 
Объект тега

Добавляет метаданные к одному тегу, используемому объектом операции. Не обязательно иметь объект тега для каждого тега, определенного в экземплярах объекта операции.

Фиксированные поля
Имя поля Тип Описание
имя струна ТРЕБУЕТСЯ . Имя тега.
описание строка Краткое описание тега. Синтаксис CommonMark МОЖЕТ использоваться для форматированного текстового представления.
внешние документы Объект внешней документации Дополнительная внешняя документация для этого тега.

Этот объект МОЖЕТ быть расширен за счет расширений спецификации.

Пример объекта тега
 {
"имя": "домашнее животное",
"description": "Операции с домашними животными"
}
 
 имя: домашнее животное
описание: Операции с домашними животными
 
Объект ссылки

Простой объект, позволяющий ссылаться на другие компоненты в спецификации, как внутри, так и снаружи.

Объект ссылки определяется ссылкой JSON и следует той же структуре, поведению и правилам.

Для этой спецификации разрешение ссылок выполняется в соответствии со спецификацией JSON Reference, а не спецификацией JSON Schema.

Фиксированные поля
Имя поля Тип Описание
$ref струна ТРЕБУЕТСЯ . Ссылочная строка.

Этот объект не может быть дополнен дополнительными свойствами, и любые добавленные свойства ДОЛЖНЫ игнорироваться.

Пример ссылочного объекта
 {
"$ref": "#/компоненты/схемы/домашнее животное"
}
 
 $ref: '#/components/schemas/Pet'
 
Пример документа относительной схемы
 {
  "$ref": "Pet.json"
}
 
 $ref: Pet.yaml
 
Родственные документы со встроенной схемой Пример
 {
  "$ref": "definitions.json#/домашнее животное"
}
 
 $ref: определения.yaml#/домашнее животное
 
Объект схемы

Объект схемы позволяет определять типы входных и выходных данных. Эти типы могут быть объектами, а также примитивами и массивами. Этот объект является расширенным подмножеством спецификации схемы JSON Wright Draft 00.

Дополнительные сведения о свойствах см. в разделе Ядро схемы JSON и Проверка схемы JSON. Если не указано иное, определения свойств следуют схеме JSON.

Свойства

Следующие свойства взяты непосредственно из определения схемы JSON и соответствуют тем же спецификациям:

  • title
  • кратно
  • максимум
  • эксклюзивМаксимум
  • минимум
  • эксклюзивМинимум
  • максимальная длина
  • минДлина
  • Шаблон
  • (Эта строка ДОЛЖНА быть допустимым регулярным выражением в соответствии с диалектом регулярных выражений Ecma-262 Edition 5.1)
  • Максимальное количество элементов
  • минЭлементы
  • уникальных предметов
  • МаксСвойства
  • минСвойства
  • требуется
  • перечисление

Следующие свойства взяты из определения схемы JSON, но их определения были скорректированы в соответствии со спецификацией OpenAPI.

  • тип — значение ДОЛЖНО быть строкой. Несколько типов через массив не поддерживаются.
  • allOf — встроенная или ссылочная схема ДОЛЖНА быть объектом схемы, а не стандартной схемой JSON.
  • oneOf — встроенная или ссылочная схема ДОЛЖНА быть объектом схемы, а не стандартной схемой JSON.
  • anyOf — встроенная или ссылочная схема ДОЛЖНА быть объектом схемы, а не стандартной схемой JSON.
  • нет — встроенная или ссылочная схема ДОЛЖНА быть объектом схемы, а не стандартной схемой JSON.
  • элементов — значение ДОЛЖНО быть объектом, а не массивом. Встроенная или ссылочная схема ДОЛЖНА быть объектом схемы, а не стандартной схемой JSON. Элементы ДОЛЖНЫ присутствовать, если тип - это массив .
  • Свойства
  • . Определения свойств ДОЛЖНЫ быть объектом схемы, а не стандартной схемой JSON (встроенной или указанной).
  • AdditionalProperties — значение может быть логическим или объектным. Встроенная или ссылочная схема ДОЛЖНА быть объектом схемы, а не стандартной схемой JSON. В соответствии со схемой JSON, AdditionalProperties по умолчанию имеет значение true .
  • Описание
  • — синтаксис CommonMark МОЖЕТ использоваться для форматированного текстового представления.
  • Формат
  • — дополнительные сведения см. в разделе «Форматы типов данных». Опираясь на определенные форматы схемы JSON, OAS предлагает несколько дополнительных предопределенных форматов.
  • по умолчанию — значение по умолчанию представляет собой то, что потребитель входных данных принял бы за значение схемы, если оно не указано. В отличие от схемы JSON, значение ДОЛЖНО соответствовать определенному типу для объекта схемы, определенного на том же уровне. Например, если типа является строкой , то по умолчанию может быть "foo" , но не может быть 1 .

В качестве альтернативы, в любое время, когда можно использовать объект схемы, вместо него можно использовать ссылочный объект. Это позволяет ссылаться на определения вместо их встроенного определения.

Дополнительные свойства, определенные спецификацией схемы JSON и не упомянутые здесь, строго не поддерживаются.

Помимо полей подмножества схемы JSON, следующие поля МОГУТ использоваться для дальнейшей документации схемы:

Фиксированные поля
Имя поля Тип Описание
Обнуляемый логическое значение Значение true добавляет "null" к разрешенному типу, указанному ключевым словом type , только если тип явно определен в том же объекте схемы. Другие ограничения объекта схемы сохраняют свое определенное поведение и, следовательно, могут запрещать использование null в качестве значения. Значение false оставляет указанный тип или тип по умолчанию без изменений. Значение по умолчанию — false .
дискриминатор Дискриминатор Объект Добавляет поддержку полиморфизма. Дискриминатор — это имя объекта, которое используется для различения других схем, которые могут удовлетворять описанию полезной нагрузки. Дополнительные сведения см. в разделе Композиция и наследование.
Только для чтения логическое значение Относится только к определениям схемы "свойства" . Объявляет свойство как «только для чтения». Это означает, что он МОЖЕТ быть отправлен как часть ответа, но НЕ ДОЛЖЕН быть отправлен как часть запроса. Если свойство помечено как readOnly , являющееся true и находится в списке required , required повлияет только на ответ. Свойство НЕ ДОЛЖНО быть помечено одновременно как readOnly и writeOnly равно true . Значение по умолчанию: false .
только запись логическое значение Относится только к определениям схемы "свойства" . Объявляет свойство как «только для записи». Следовательно, он МОЖЕТ быть отправлен как часть запроса, но НЕ ДОЛЖЕН быть отправлен как часть ответа. Если свойство помечено как writeOnly is true и находится в списке required , required вступит в силу только по запросу. Свойство НЕ ДОЛЖНО быть помечено одновременно как только для чтения и только для записи , являющееся истинным . Значение по умолчанию: false .
XML-файл XML-объект МОЖЕТ использоваться только в схемах свойств. Это не влияет на корневые схемы. Добавляет дополнительные метаданные для описания XML-представления этого свойства.
внешние документы Объект внешней документации Дополнительная внешняя документация для этой схемы.
пример Любой Свойство в произвольной форме для включения примера экземпляра для этой схемы. Чтобы представить примеры, которые не могут быть представлены естественным образом в JSON или YAML, можно использовать строковое значение, содержащее пример с экранированием, где это необходимо.
устарело логическое значение Указывает, что схема устарела и ее СЛЕДУЕТ вывести из использования. Значение по умолчанию – 9.0413 ложь .

Этот объект МОЖЕТ быть расширен за счет расширений спецификации.

Композиция и наследование (полиморфизм)

Спецификация OpenAPI позволяет комбинировать и расширять определения моделей, используя свойство allOf схемы JSON, фактически предлагая композицию модели. allOf принимает массив определений объектов, которые проверены независимо , но вместе составляют один объект.

Хотя композиция обеспечивает расширяемость модели, она не предполагает иерархии между моделями. Для поддержки полиморфизма спецификация OpenAPI добавляет дискриминатор поле. При использовании дискриминатор будет именем свойства, которое решает, какое определение схемы проверяет структуру модели. Таким образом, поле дискриминатора ДОЛЖНО быть обязательным полем. Есть два способа определить значение дискриминатора для наследуемого экземпляра.

  • Используйте имя схемы.
  • Переопределить имя схемы, заменив свойство новым значением. Если существует новое значение, оно имеет приоритет над именем схемы. Таким образом, встроенные определения схемы, которые не имеют заданного идентификатора, нельзя использовать в полиморфизме.
XML-моделирование

Свойство xml позволяет использовать дополнительные определения при преобразовании определения JSON в XML. Объект XML содержит дополнительную информацию о доступных параметрах.

Примеры объектов схемы
Примитивная выборка
 {
  "тип": "строка",
  "формат": "электронная почта"
}
 
 тип: строка
формат: электронная почта
 
Простая модель
 {
  "тип": "объект",
  "требуется": [
    "имя"
  ],
  "характеристики": {
    "имя": {
      "тип": "строка"
    },
    "адрес": {
      "$ref": "#/компоненты/схемы/адрес"
    },
    "возраст": {
      "тип": "целое",
      "формат": "int32",
      "минимум": 0
    }
  }
}
 
 тип: объект
требуется:
- имя
характеристики:
  имя:
    тип: строка
  адрес:
    $ref: '#/компоненты/схемы/адрес'
  возраст:
    тип: целое число
    формат: int32
    минимум: 0
 
Модель со свойствами карты/словаря

Для простого преобразования строки в строку:

 {
  "тип": "объект",
  "дополнительные свойства": {
    "тип": "строка"
  }
}
 
 тип: объект
дополнительные свойства:
  тип: строка
 

Для сопоставления строки с моделью:

 {
  "тип": "объект",
  "дополнительные свойства": {
    "$ref": "#/компоненты/схемы/ComplexModel"
  }
}
 
 тип: объект
дополнительные свойства:
  $ref: '#/компоненты/схемы/ComplexModel'
 
Модель с примером
 {
  "тип": "объект",
  "характеристики": {
    "я бы": {
      "тип": "целое",
      "формат": "int64"
    },
    "имя": {
      "тип": "строка"
    }
  },
  "требуется": [
    "имя"
  ],
  "пример": {
    "имя": "Пума",
    "идентификатор": 1
  }
}
 
 тип: объект
характеристики:
  я бы:
    тип: целое число
    формат: int64
  имя:
    тип: строка
требуется:
- имя
пример:
  имя: Пума
  идентификатор: 1
 
Модели с составом
 {
  "составные части": {
    "схемы": {
      "Модель ошибки": {
        "тип": "объект",
        "требуется": [
          "сообщение",
          "код"
        ],
        "характеристики": {
          "сообщение": {
            "тип": "строка"
          },
          "код": {
            "тип": "целое",
            "минимум": 100,
            "максимум": 600
          }
        }
      },
      "ExtendedErrorModel": {
        "все": [
          {
            "$ref": "#/компоненты/схемы/ErrorModel"
          },
          {
            "тип": "объект",
            "требуется": [
              "первопричина"
            ],
            "характеристики": {
              "первопричина": {
                "тип": "строка"
              }
            }
          }
        ]
      }
    }
  }
}
 
 Компоненты:
  схемы:
    Модель ошибки:
      тип: объект
      требуется:
      - сообщение
      - код
      характеристики:
        сообщение:
          тип: строка
        код:
          тип: целое число
          минимум: 100
          максимум: 600
    Расширенная модель ошибки:
      все:
      - $ref: '#/components/schemas/ErrorModel'
      - тип: объект
        требуется:
        - первопричина
        характеристики:
          первопричина:
            тип: строка
 
Модели с поддержкой полиморфизма
 {
  "составные части": {
    "схемы": {
      "Домашний питомец": {
        "тип": "объект",
        "дискриминатор": {
          "имя_свойства": "тип_питомца"
        },
        "характеристики": {
          "имя": {
            "тип": "строка"
          },
          "тип питомца": {
            "тип": "строка"
          }
        },
        "требуется": [
          "имя",
          "тип питомца"
        ]
      },
      "Кошка": {
        "description": "Изображение кошки.  Обратите внимание, что `Cat` будет использоваться в качестве значения дискриминатора.",
        "все": [
          {
            "$ref": "#/компоненты/схемы/домашнее животное"
          },
          {
            "тип": "объект",
            "характеристики": {
              "охотничий навык": {
                "тип": "строка",
                "description": "Измеренное умение для охоты",
                "по умолчанию": "ленивый",
                "перечисление": [
                  "невежественный",
                  "ленивый",
                  "авантюрный",
                  "агрессивный"
                ]
              }
            },
            "требуется": [
              "охотничий навык"
            ]
          }
        ]
      },
      "Собака": {
        "description": "Изображение собаки. Обратите внимание, что `Dog` будет использоваться в качестве значения дискриминатора.",
        "все": [
          {
            "$ref": "#/компоненты/схемы/домашнее животное"
          },
          {
            "тип": "объект",
            "характеристики": {
              "packSize": {
                "тип": "целое",
                "формат": "int32",
                "description": "размер стаи, из которой собака",
                "по умолчанию": 0,
                "минимум": 0
              }
            },
            "требуется": [
              "Размер упаковки"
            ]
          }
        ]
      }
    }
  }
}
 
 Компоненты:
  схемы:
    Домашний питомец:
      тип: объект
      дискриминатор:
        имя свойства: petType
      характеристики:
        имя:
          тип: строка
        тип питомца:
          тип: строка
      требуется:
      - имя
      - тип питомца
    Cat: ## "Cat" будет использоваться как значение дискриминатора
      описание: Представление кота
      все:
      - $ref: '#/components/schemas/Pet'
      - тип: объект
        характеристики:
          охотничий навык:
            тип: строка
            описание: Измеренное умение для охоты
            перечисление:
            - невежественный
            - ленивый
            - предприимчивый
            - агрессивный
        требуется:
        - охотничье мастерство
    Собака: ## «Собака» будет использоваться в качестве значения дискриминатора. 
      описание: изображение собаки
      все:
      - $ref: '#/components/schemas/Pet'
      - тип: объект
        характеристики:
          размер пакета:
            тип: целое число
            формат: int32
            описание: размер стаи, из которой собака
            по умолчанию: 0
            минимум: 0
        требуется:
        - размер упаковки
 
Объект-дискриминатор

Если тело запроса или полезная нагрузка ответа могут быть одной из нескольких различных схем, можно использовать объект-дискриминатор , чтобы помочь в сериализации, десериализации и проверке. Дискриминатор — это конкретный объект в схеме, который используется для информирования потребителя о спецификации альтернативной схемы на основе связанного с ней значения.

При использовании дискриминатора встроенных схем не учитываются.

Фиксированные поля
Карта
Имя поля Тип Описание
имя свойства струна ТРЕБУЕТСЯ . Имя свойства в полезных данных, которое будет содержать значение дискриминатора.
отображение [ строка , строка ] Объект для хранения сопоставлений между значениями полезной нагрузки и именами схем или ссылками.

Объект дискриминатора допустим только при использовании одного из составных ключевых слов oneOf , anyOf , allOf .

В OAS 3.0 полезная нагрузка ответа МОЖЕТ быть описана как ровно один из любого количества типов:

 MyResponseType:
  один из:
  - $ref: '#/components/schemas/Cat'
  - $ref: '#/компоненты/схемы/собака'
  - $ref: '#/components/schemas/Lizard'
 

что означает, что полезная нагрузка ДОЛЖНА при проверке соответствовать ровно одной из схем, описанных Кошка , Собака или Ящерица . В этом случае дискриминатор МОЖЕТ действовать как «подсказка» для быстрой проверки и выбора соответствующей схемы, что может быть дорогостоящей операцией, в зависимости от сложности схемы. Затем мы можем точно описать, какое поле говорит нам, какую схему использовать:

 MyResponseType:
  один из:
  - $ref: '#/components/schemas/Cat'
  - $ref: '#/компоненты/схемы/собака'
  - $ref: '#/components/schemas/Lizard'
  дискриминатор:
    имя свойства: petType
 

Теперь ожидается, что свойство с именем petType ДОЛЖНО присутствовать в полезной нагрузке ответа , а его значение будет соответствовать имени схемы, определенной в документе OAS. Таким образом, полезная нагрузка ответа:

 {
  "идентификатор": 12345,
  "petType": "Кошка"
}
 

Указывает, что схема Cat должна использоваться вместе с этой полезной нагрузкой.

В сценариях, где значение поля дискриминатора не соответствует имени схемы или неявное сопоставление невозможно, необязательный сопоставление определение МОЖЕТ использоваться:

 MyResponseType:
  один из:
  - $ref: '#/components/schemas/Cat'
  - $ref: '#/компоненты/схемы/собака'
  - $ref: '#/components/schemas/Lizard'
  - $ref: 'https://gigantic-server. com/schemas/Monster/schema.json'
  дискриминатор:
    имя свойства: petType
    сопоставление:
      собака: '#/компоненты/схемы/собака'
      монстр: 'https://gigantic-server.com/schemas/Monster/schema.json'
 

Здесь дискриминатор значение из собака будет отображаться на схему #/components/schemas/Dog , а не на значение по умолчанию (неявное) Dog . Если значение дискриминатора не совпадает с неявным или явным сопоставлением, никакая схема не может быть определена, и проверка СЛЕДУЕТ завершиться ошибкой. Ключи сопоставления ДОЛЖНЫ быть строковыми значениями, но инструменты МОЖЕТ преобразовывать значения ответов в строки для сравнения.

При использовании в сочетании с конструкцией anyOf использование дискриминатора позволяет избежать неоднозначности, когда несколько схем могут удовлетворять одной полезной нагрузке.

В обоих вариантах использования oneOf и anyOf все возможные схемы ДОЛЖНЫ быть явно перечислены. Чтобы избежать избыточности, дискриминатор МОЖЕТ быть добавлен к определению родительской схемы, и все схемы, содержащие родительскую схему в конструкции allOf , могут использоваться в качестве альтернативной схемы.

Например:

 компоненты:
  схемы:
    Домашний питомец:
      тип: объект
      требуется:
      - тип питомца
      характеристики:
        тип питомца:
          тип: строка
      дискриминатор:
        имя свойства: petType
        сопоставление:
          собака Собака
    Кошка:
      все:
      - $ref: '#/components/schemas/Pet'
      - тип: объект
        # все остальные свойства, характерные для `Cat`
        характеристики:
          имя:
            тип: строка
    Собака:
      все:
      - $ref: '#/components/schemas/Pet'
      - тип: объект
        # все остальные свойства, характерные для `Dog`
        характеристики:
          лаять:
            тип: строка
    Ящерица:
      все:
      - $ref: '#/components/schemas/Pet'
      - тип: объект
        # все остальные свойства, специфичные для `Lizard`
        характеристики:
          любитRocks:
            тип: логический
 

такая полезная нагрузка:

 {
  "petType": "Кошка",
  "имя": "туманный"
}
 

будет означать, что используется схема Cat . Аналогично этой схеме:

 {
  "petType": "собака",
  «кора»: «мягкая»
}
 

будет отображаться в Dog из-за определения в элементе mappings .

Объект XML

Объект метаданных, позволяющий более точно настроить определения модели XML.

При использовании массивов имена элементов XML равны , а не (для форм единственного/множественного числа), и свойство имя СЛЕДУЕТ использовать для добавления этой информации. См. примеры ожидаемого поведения.

Фиксированные поля
Имя поля Тип Описание
имя струна Заменяет имя элемента/атрибута, используемого для описываемого свойства схемы. При определении в элементах это повлияет на имена отдельных элементов XML в списке. При определении рядом с тип является массивом (вне элементов ), это повлияет на элемент упаковки и только в том случае, если завернутый равен true . Если в оболочке равно false , это будет проигнорировано.
пространство имен струна URI определения пространства имен. Значение ДОЛЖНО быть в форме абсолютного URI.
префикс струна Префикс для имени.
атрибут логическое значение Указывает, преобразуется ли определение свойства в атрибут, а не в элемент. Значение по умолчанию: false .
в упаковке логическое значение МОЖЕТ использоваться только для определения массива. Указывает, является ли массив упакованным (например, ) или развернутым ( ). Значение по умолчанию: false . Определение вступает в силу только в том случае, если оно определено вместе с типа , являющимся массивом (вне элементов ).

Этот объект МОЖЕТ быть расширен за счет расширений спецификации.

Примеры XML-объектов

Примеры определений XML-объектов включены в определение свойства объекта схемы с образцом его XML-представления.

Нет XML-элемента

Свойство основной строки:

 {
    "животные": {
        "тип": "строка"
    }
}
 
 животных:
  тип: строка
 
 <животные>...
 

Свойство массива основных строк ( в оболочке по умолчанию false ):

 {
    "животные": {
        "тип": "массив",
        "Предметы": {
            "тип": "строка"
        }
    }
}
 
 животных:
  тип: массив
  Предметы:
    тип: строка
 
 <животные>...
<животные>...
<животные>...
 
Замена имени XML
 {
  "животные": {
    "тип": "строка",
    "xml": {
      "имя": "животное"
    }
  }
}
 
 животных:
  тип: строка
  XML:
    имя: животное
 
 <животное>. ..
 
XML-атрибут, префикс и пространство имен

В этом примере показано полное определение модели.

 {
  "Человек": {
    "тип": "объект",
    "характеристики": {
      "я бы": {
        "тип": "целое",
        "формат": "int32",
        "xml": {
          "атрибут": правда
        }
      },
      "имя": {
        "тип": "строка",
        "xml": {
          "пространство имен": "http://example.com/schema/sample",
          "префикс": "образец"
        }
      }
    }
  }
}
 
 Лицо:
  тип: объект
  характеристики:
    я бы:
      тип: целое число
      формат: int32
      XML:
        атрибут: правда
    имя:
      тип: строка
      XML:
        пространство имен: http://example.com/schema/sample
        префикс: образец
 
 <Лицо>
    пример

 
Массивы XML

Изменение имен элементов:

 {
  "животные": {
    "тип": "массив",
    "Предметы": {
      "тип": "строка",
      "xml": {
        "имя": "животное"
      }
    }
  }
}
 
 животные:
  тип: массив
  Предметы:
    тип: строка
    XML:
      имя: животное
 
 <животное>значение
<животное>значение
 

Внешнее свойство name не влияет на XML:

 {
  "животные": {
    "тип": "массив",
    "Предметы": {
      "тип": "строка",
      "xml": {
        "имя": "животное"
      }
    },
    "xml": {
      "имя": "инопланетяне"
    }
  }
}
 
 животных:
  тип: массив
  Предметы:
    тип: строка
    XML:
      имя: животное
  XML:
    Название: пришельцы
 
 <животное>значение
<животное>значение
 

Даже если массив упакован, если имя не определено явно, одно и то же имя будет использоваться как внутри, так и снаружи:

 {
  "животные": {
    "тип": "массив",
    "Предметы": {
      "тип": "строка"
    },
    "xml": {
      "завернутый": правда
    }
  }
}
 
 животных:
  тип: массив
  Предметы:
    тип: строка
  XML:
    завернутый: правда
 
 <животные>
  <животные>значение
  <животные>значение

 

Чтобы решить проблему именования в приведенном выше примере, можно использовать следующее определение:

 {
  "животные": {
    "тип": "массив",
    "Предметы": {
      "тип": "строка",
      "xml": {
        "имя": "животное"
      }
    },
    "xml": {
      "завернутый": правда
    }
  }
}
 
 животных:
  тип: массив
  Предметы:
    тип: строка
    XML:
      имя: животное
  XML:
    завернутый: правда
 
 <животные>
  <животное>значение
  <животное>значение

 

Влияет как на внутренние, так и на внешние имена:

 {
  "животные": {
    "тип": "массив",
    "Предметы": {
      "тип": "строка",
      "xml": {
        "имя": "животное"
      }
    },
    "xml": {
      "имя": "инопланетяне",
      "завернутый": правда
    }
  }
}
 
 животных:
  тип: массив
  Предметы:
    тип: строка
    XML:
      имя: животное
  XML:
    Название: пришельцы
    завернутый: правда
 
 <инопланетяне>
  <животное>значение
  <животное>значение

 

Если мы меняем внешний элемент, но не внутренние:

 {
  "животные": {
    "тип": "массив",
    "Предметы": {
      "тип": "строка"
    },
    "xml": {
      "имя": "инопланетяне",
      "завернутый": правда
    }
  }
}
 
 животных:
  тип: массив
  Предметы:
    тип: строка
  XML:
    Название: пришельцы
    завернутый: правда
 
 <инопланетяне>
  <инопланетяне>значение
  <инопланетяне>значение

 
Объект схемы безопасности

Определяет схему безопасности, которую могут использовать операции. Поддерживаемые схемы: HTTP-аутентификация, ключ API (в виде заголовка, параметра cookie или параметра запроса), общие потоки OAuth3 (неявные, пароль, учетные данные клиента и код авторизации), как определено в RFC6749, и OpenID Connect Discovery.

Фиксированные поля
Имя поля Тип Применяется к Описание
тип струна Любой ТРЕБУЕТСЯ . Тип схемы безопасности. Допустимые значения: "apiKey" , "http" , "oauth3" , "openIdConnect" .
описание струна Любой Краткое описание схемы безопасности. Синтаксис CommonMark МОЖЕТ использоваться для форматированного текстового представления.
имя струна ключ API ТРЕБУЕТСЯ . Имя используемого заголовка, запроса или файла cookie.
в струна ключ API ТРЕБУЕТСЯ . Расположение ключа API. Допустимые значения: "запрос" , "заголовок" или "cookie" .
схема струна http ТРЕБУЕТСЯ . Имя схемы авторизации HTTP, которая будет использоваться в заголовке авторизации, как определено в RFC7235. Используемые значения СЛЕДУЕТ зарегистрировать в реестре IANA Authentication Scheme.
форма носителя струна http ( "носитель" ) Подсказка клиенту определить формат токена носителя. Токены-носители обычно генерируются сервером авторизации, поэтому эта информация предназначена в первую очередь для целей документации.
потоки Объект потоков OAuth оаут3 ТРЕБУЕТСЯ . Объект, содержащий информацию о конфигурации для поддерживаемых типов потока.
опенидконнектурл струна опенидконнект ТРЕБУЕТСЯ . URL-адрес OpenId Connect для обнаружения значений конфигурации OAuth3. Это ДОЛЖНО быть в форме URL.

Этот объект МОЖЕТ быть расширен за счет расширений спецификации.

Пример объекта схемы безопасности
Пример базовой аутентификации
 {
  "тип": "http",
  "схема": "базовая"
}
 
 тип: http
схема: базовая
 
Образец ключа API
 {
  "тип": "апиКей",
  "имя": "api_key",
  "в": "заголовок"
}
 
 тип: APIKey
имя: API_key
в: заголовок
 
Образец носителя JWT
 {
  "тип": "http",
  "схема": "носитель",
  "bearerFormat": "JWT",
}
 
 тип: http
схема: носитель
носительФормат: JWT
 
Неявный образец OAuth3
 {
  "тип": "oauth3",
  "течет": {
    "скрытый": {
      "authorizationUrl": "https://example. com/api/oauth/dialog",
      "области": {
        "write:pets": "изменить питомцев в вашем аккаунте",
        "read:pets": "читать своих питомцев"
      }
    }
  }
}
 
 тип: oauth3
потоки:
  скрытый:
    URL-адрес авторизации: https://example.com/api/oauth/dialog
    области:
      write:pets: изменить питомцев в своей учетной записи
      read:pets: читай своих питомцев
 
Объект потоков OAuth

Позволяет настраивать поддерживаемые потоки OAuth.

Фиксированные поля
Имя поля Тип Описание
неявный Объект потока OAuth Конфигурация для неявного потока OAuth
пароль Объект потока OAuth Конфигурация для потока пароля владельца ресурса OAuth
учетные данные клиента Объект потока OAuth Конфигурация потока учетных данных клиента OAuth. Ранее называвшееся приложением в OpenAPI 2. 0.
Код авторизации Объект потока OAuth Конфигурация потока кода авторизации OAuth. Ранее назывался accessCode в OpenAPI 2.0.

Этот объект МОЖЕТ быть расширен за счет расширений спецификации.

Объект потока OAuth

Сведения о конфигурации для поддерживаемого потока OAuth

Фиксированные поля
Карта
Имя поля Тип Применяется к Описание
URL авторизации струна oauth3 ( "неявный" , "код авторизации" ) ТРЕБУЕТСЯ . URL-адрес авторизации, который будет использоваться для этого потока. Это ДОЛЖНО быть в форме URL.
URL-адрес токена струна oauth3 ( "пароль" , "учетные данные клиента" , "код авторизации" ) ТРЕБУЕТСЯ . URL-адрес токена, который будет использоваться для этого потока. Это ДОЛЖНО быть в форме URL.
URL-адрес обновления струна оаут3 URL-адрес, используемый для получения токенов обновления. Это ДОЛЖНО быть в форме URL.
прицелы [ строка , строка ] оаут3 ТРЕБУЕТСЯ . Доступные области для схемы безопасности OAuth3. Сопоставление между именем области действия и ее кратким описанием. Карта МОЖЕТ быть пустой.

Этот объект МОЖЕТ быть расширен за счет расширений спецификации.

Примеры объектов потока OAuth
 {
  "тип": "oauth3",
  "течет": {
    "скрытый": {
      "authorizationUrl": "https://example.com/api/oauth/dialog",
      "области": {
        "write:pets": "изменить питомцев в вашем аккаунте",
        "read:pets": "читать своих питомцев"
      }
    },
    "Код авторизации": {
      "authorizationUrl": "https://example. com/api/oauth/dialog",
      "tokenUrl": "https://example.com/api/oauth/токен",
      "области": {
        "write:pets": "изменить питомцев в вашем аккаунте",
        "read:pets": "читать своих питомцев"
      }
    }
  }
}
 
 тип: oauth3
потоки:
  скрытый:
    URL-адрес авторизации: https://example.com/api/oauth/dialog
    области:
      write:pets: изменить питомцев в своей учетной записи
      read:pets: читай своих питомцев
  Код авторизации:
    URL-адрес авторизации: https://example.com/api/oauth/dialog
    tokenUrl: https://example.com/api/oauth/token
    области:
      write:pets: изменить питомцев в своей учетной записи
      read:pets: читай своих питомцев
 
Security Requirement Object

Список необходимых схем безопасности для выполнения этой операции. Имя, используемое для каждого свойства, ДОЛЖНО соответствовать схеме безопасности, объявленной в схемах безопасности в объекте компонентов.

Security Requirement Объекты, которые содержат несколько схем, требуют, чтобы все схемы ДОЛЖНЫ быть удовлетворены для авторизации запроса. Это обеспечивает поддержку сценариев, в которых для передачи информации о безопасности требуется несколько параметров запроса или заголовков HTTP.

Когда список объектов требований безопасности определен для объекта OpenAPI или объекта операции, только один из объектов требований безопасности в списке должен быть удовлетворен для авторизации запроса.

Узорчатые поля
Шаблон поля Тип Описание
{имя} [ строка ] Каждое имя ДОЛЖНО соответствовать схеме безопасности, которая объявлена ​​в схемах безопасности в объекте компонентов. Если схема безопасности имеет тип "oauth3" или "openIdConnect" , то значение представляет собой список имен областей, необходимых для выполнения, и этот список МОЖЕТ быть пустым, если для авторизации не требуется указанная область. Для других типов схем безопасности массив ДОЛЖЕН быть пустым.
Примеры объектов требования безопасности
Требование безопасности без OAuth3
 {
  "апи_ключ": []
}
 
 API_key: []
 
Требование безопасности OAuth3
 {
  "зоомагазин_аутент": [
    "написать: домашние животные",
    "читать: домашние животные"
  ]
}
 
 petstore_auth:
- напиши: домашние животные
- читать: домашние животные
 
Дополнительная безопасность OAuth3

Дополнительная безопасность OAuth3, определенная в объекте OpenAPI или объекте операции:

 {
  "безопасность": [
    {},
    {
      "зоомагазин_аутент": [
        "написать: домашние животные",
        "читать: домашние животные"
      ]
    }
  ]
}
 
 безопасность:
  - {}
  - petstore_auth:
    - напиши: домашние животные
    - читать: домашние животные
 

Расширения спецификации

Хотя спецификация OpenAPI старается учесть большинство вариантов использования, в определенные моменты могут быть добавлены дополнительные данные для расширения спецификации.

Свойства расширений реализованы в виде шаблонных полей, которые всегда имеют префикс "x-" .

9х-
Шаблон поля Тип Описание Любой Разрешает расширения схемы OpenAPI. Имя поля ДОЛЖНО начинаться с x-, например, x-internal-id . Значение может быть null , примитивом, массивом или объектом. Может иметь любое допустимое значение формата JSON.

Расширения могут поддерживаться или не поддерживаться доступными инструментами, но они также могут быть расширены для добавления запрошенной поддержки (если инструменты являются внутренними или открытыми).

Фильтрация безопасности

Некоторые объекты в спецификации OpenAPI МОГУТ быть объявлены и оставаться пустыми или быть полностью удалены, даже если они по своей сути являются ядром документации API.

Причина в том, чтобы обеспечить дополнительный уровень контроля доступа к документации. Хотя это и не является частью самой спецификации, некоторые библиотеки МОГУТ разрешать доступ к частям документации на основе той или иной формы аутентификации/авторизации.

Два примера:

  1. Объект Paths МОЖЕТ быть пустым. Это может показаться нелогичным, но это может сказать зрителю, что он попал в нужное место, но не может получить доступ к какой-либо документации. У них по-прежнему будет доступ к информационному объекту, который может содержать дополнительную информацию об аутентификации.
  2. Объект элемента пути МОЖЕТ быть пустым. В этом случае зритель будет знать, что путь существует, но не сможет увидеть какие-либо его операции или параметры. Это отличается от сокрытия самого пути от объекта Paths, потому что пользователь будет знать о его существовании. Это позволяет поставщику документации точно контролировать то, что может видеть зритель.

Приложение A: История изменений

Версия Дата Примечания
3. 0.3 20.02.2020 Выпуск исправления спецификации OpenAPI 3.0.3
3.0.2 08.10.2018 Выпуск исправления спецификации OpenAPI 3.0.2
3.0.1 06.12.2017 Выпуск исправления спецификации OpenAPI 3.0.1
3.0.0 26.07.2017 Выпуск спецификации OpenAPI 3.0.0
3.0.0-rc2 16.06.2017 rc2 спецификации 3.0
3.0.0-rc1 27.04.2017 rc1 спецификации 3.0
3.0.0-rc0 28.02.2017 Проект реализации спецификации 3.0
2,0 31.12.2015 Пожертвование Swagger 2.0 инициативе OpenAPI
2,0 08.09.2014 Выпуск Swagger 2.0
1,2 14.03.2014 Первоначальный выпуск официального документа.
1,1 22 августа 2012 г. Выпуск Swagger 1.1
1,0 10.08.2011 Первый выпуск спецификации Swagger

Составление спецификации | Docker Documentation

Расчетное время чтения: 85 минут

Файл Compose представляет собой файл YAML, определяющий службы, сети и тома для приложения Docker. Последние и рекомендуемые версия формата файла Compose определяется параметром Compose Технические характеристики. Спецификация Compose объединяет устаревшие Версии 2.x и 3.x, объединяющие свойства в этих форматах и ​​реализованные Compose 1.27.0+ .

В этом документе указывается формат файла Compose, используемый для определения приложений с несколькими контейнерами. Распространение данного документа не ограничено.

Ключевые слова «ДОЛЖЕН», «НЕ ДОЛЖЕН», «ТРЕБУЕТСЯ», «ДОЛЖЕН», «НЕ ДОЛЖЕН», «СЛЕДУЕТ», «НЕ ДОЛЖЕН», «РЕКОМЕНДУЕТСЯ», «МОЖЕТ» и «ДОПОЛНИТЕЛЬНО» в этом документе должны интерпретироваться, как описано в RFC 2119.

Требования и необязательные атрибуты

Спецификация Compose включает свойства, предназначенные для локальной среды выполнения контейнера OCI, предоставление конкретных параметров конфигурации ядра Linux, а также некоторых конкретных свойств контейнера Windows, а также функций облачной платформы, связанных с размещением ресурсов в кластере, распространением реплицированных приложений и масштабируемостью.

Мы признаем, что ни одна реализация Compose не должна поддерживать все атрибуты и что поддержка некоторых свойств зависит от платформы и может быть подтверждено только во время выполнения. Определение версионной схемы для управления поддерживаемыми свойства в файле Compose, установленные инструментом docker-compose, где Compose формат файла был разработан, не дает никаких гарантий того, что атрибуты конечного пользователя будут действительно реализованы.

Спецификация определяет ожидаемый синтаксис и поведение конфигурации, но, пока не указано иное, поддержка любого из них НЕОБЯЗАТЕЛЬНА.

Реализации Compose для анализа файла Compose с использованием неподдерживаемых атрибутов СЛЕДУЕТ предупреждать пользователя. Мы рекомендуем исполнителей для поддержки этих режимов работы:

  • по умолчанию: предупреждать пользователя о неподдерживаемых атрибутах, но игнорировать их
  • строгий: предупредить пользователя о неподдерживаемых атрибутах и ​​отклонить создание файла
  • свободно: игнорировать неподдерживаемые атрибуты И неизвестные атрибуты (которые не были определены спецификацией на момент создания реализации)

Модель приложения Compose

Спецификация Compose позволяет определить приложение на основе контейнера, не зависящее от платформы. Такое приложение разработано как набор контейнеров, которые должны работать вместе с соответствующими общими ресурсами и каналами связи.

Вычислительные компоненты приложения определяются как службы. Служба — это абстрактная концепция, реализованная на платформах путем запуска одного и того же образа контейнера (и конфигурации) один или несколько раз.

Службы взаимодействуют друг с другом через Сети. В этой спецификации сеть представляет собой абстракцию возможности платформы для установления IP-маршрута между контейнерами в службах, связанных вместе. Низкоуровневые сетевые опции для конкретных платформ сгруппированы в определение сети и МОГУТ быть частично реализованы на некоторых платформах.

Службы хранят и совместно используют постоянные данные в томах. Спецификация описывает такие постоянные данные, как монтирование файловой системы высокого уровня с глобальными параметрами. Фактические детали реализации для конкретной платформы сгруппированы в определении Volumes и МОГУТ быть частично реализованы на некоторых платформах.

Для некоторых служб требуются данные конфигурации, которые зависят от среды выполнения или платформы. Для этого спецификация определяет специальную концепцию: Configs. С точки зрения сервисного контейнера конфигурации сравнимы с томами в том смысле, что они представляют собой файлы, смонтированные в контейнере. Но фактическое определение включает в себя отдельные ресурсы и службы платформы, которые абстрагируются этим типом.

Секрет — это особый вид данных конфигурации для конфиденциальных данных, которые НЕ ДОЛЖНЫ раскрываться без соображений безопасности. Секреты предоставляются службам в виде файлов, смонтированных в их контейнерах, но ресурсы для конкретных платформ для предоставления конфиденциальных данных достаточно специфичны, чтобы заслуживать отдельной концепции и определения в спецификации Compose.

Различие в томах, конфигурациях и секретах позволяет реализациям предлагать сопоставимую абстракцию на уровне обслуживания, но охватывать конкретную конфигурацию адекватных ресурсов платформы для четко идентифицированного использования данных.

Проект — это отдельное развертывание спецификации приложения на платформе. Название проекта используется для группировки ресурсы вместе и изолировать их от других приложений или другой установки одного и того же указанного приложения Compose с различными параметрами. Реализация Compose, создающая ресурсы на платформе, ДОЛЖНА ставить префиксы имен ресурсов по проекту и установить метку com.docker.compose.project .

Имя проекта может быть задано явным образом атрибутом имени верхнего уровня . Реализация Compose ДОЛЖНА предлагать пользователю возможность задать собственное имя проекта и переопределить это имя, чтобы один и тот же файл compose.yaml можно было дважды развернуть в одной и той же инфраструктуре без изменений, просто передав другое имя.

Наглядный пример

Следующий пример иллюстрирует концепции спецификации Compose на конкретном примере приложения. Пример ненормативный.

Рассмотрим приложение, разделенное на внешнее веб-приложение и внутреннюю службу.

Внешний интерфейс настраивается во время выполнения с файлом конфигурации HTTP, управляемым инфраструктурой, предоставляющим внешнее доменное имя и сертификат сервера HTTPS, введенный защищенным секретным хранилищем платформы.

Серверная часть хранит данные в постоянном томе.

Обе службы взаимодействуют друг с другом в изолированной сети заднего уровня, в то время как внешний интерфейс также подключен к сети переднего уровня и предоставляет порт 443 для внешнего использования.

 (внешний пользователь) --> 443 [интерфейсная сеть]
                            |
                  +--------------------+
                  | интерфейсная служба |...ro...
                  | "webapp" |...ro...<сертификат сервера> #secured
                  +--------------------+
                            |
                        [внутренняя сеть]
                            |
                  +--------------------+
                  | серверная служба | г+н ___________________
                  | "база данных" |=======(постоянный том)
                  +--------------------+ \_________________/
 

Пример приложения состоит из следующих частей:

  • 2 службы, поддерживаемые образами Docker: веб-приложение и база данных
  • 1 секрет (сертификат HTTPS), введенный во внешний интерфейс
  • 1 конфигурация (HTTP), добавленная во внешний интерфейс
  • 1 постоянный том, подключенный к серверной части
  • 2 сети
 услуги:
  внешний интерфейс:
    изображение: круто/веб-приложение
    порты:
      - "443:8043"
    сети:
      - передний ярус
      - задний ярус
    конфиги:
      - httpd-конфигурация
    секреты:
      - сервер-сертификат
  серверная часть:
    изображение: круто/база данных
    тома:
      - БД-данные:/и т. д./данные
    сети:
      - задний ярус
тома:
  БД-данные:
    водитель: флокер
    driver_opts:
      размер: "10ГиБ"
конфиги:
  httpd-конфигурация:
    внешний: правда
секреты:
  сертификат сервера:
    внешний: правда
сети:
  # Наличие этих объектов достаточно для их определения
  передний уровень: {}
  задний уровень: {}
 

В этом примере показано различие между томами, конфигурациями и секретами. Пока все они все разоблачены для обслуживания контейнеров как смонтированных файлов или каталогов, только том может быть настроен для доступа на чтение и запись. Секреты и конфиги доступны только для чтения. Конфигурация тома позволяет выбрать драйвер тома и передать параметры драйвера настроить управление томами в соответствии с фактической инфраструктурой. Конфигурации и секреты полагаются на сервисы платформы, и объявлены внешними , так как они не управляются в рамках жизненного цикла приложения: реализация Compose будет использовать механизм поиска для конкретной платформы для получения значений времени выполнения.

Создать файл

Файл Compose представляет собой файл YAML, определяющий версия (УСТАРЕВШАЯ), услуги (ОБЯЗАТЕЛЬНО), сети, тома, конфиги и секреты. Путь по умолчанию для файла Compose — compose.yaml (предпочтительно) или compose.yml в рабочем каталоге. Реализации Compose ДОЛЖНЫ также поддерживать docker-compose.yaml и docker-compose.yml для обратной совместимости. Если существуют оба файла, реализации Compose ДОЛЖНЫ отдавать предпочтение каноническому compose.yaml .

Несколько файлов Compose можно объединить вместе для определения модели приложения. Комбинация файлов YAML ДОЛЖЕН быть реализован путем добавления/переопределения элементов YAML на основе порядка файлов Compose, установленного пользователем. Простой атрибуты и карты переопределяются файлом Compose самого высокого порядка, списки объединяются путем добавления. Родственник пути ДОЛЖНЫ быть разрешены на основе сначала Создавать родительскую папку файла всякий раз, когда комплементарные файлы объединенные размещаются в других папках.

Поскольку некоторые элементы файла Compose могут быть выражены как в виде отдельных строк, так и в виде сложных объектов, слияния ДОЛЖНЫ применяться к развернутая форма.

Профили

Профили

позволяют настроить модель приложения Compose для различных применений и сред. Написать реализации СЛЕДУЕТ позволять пользователю определять набор активных профилей. Точный механизм реализации специфичны и МОЖЕТ включать флаги командной строки, переменные среды и т. д.

Элемент верхнего уровня Services поддерживает атрибут profiles для определения списка именованных профилей. Услуги без набор атрибутов профилей ДОЛЖЕН быть включен всегда. Служба ДОЛЖНА игнорироваться Compose реализация, когда ни один из перечисленных профилей не соответствует активным, если только услуга не явно нацелен на команду. В этом случае его профили ДОЛЖНЫ быть добавлены в набор активных профилей. На все остальные элементы верхнего уровня не влияет профили и всегда активны.

Ссылки на другие службы (по ссылкам , расширяет или синтаксису общего ресурса service:xxx ) НЕ ДОЛЖНЫ автоматически включить компонент, который в противном случае был бы проигнорирован активными профилями. Вместо этого Реализация Compose ДОЛЖНА возвращать ошибку.

Наглядный пример
 услуги:
  фу:
    изображение: фу
  бар:
    изображение: бар
    профили:
      - тест
  баз:
    изображение: баз
    зависит от:
      - бар
    профили:
      - тест
  Зот:
    изображение: зот
    зависит от:
      - бар
    профили:
      - отлаживать
 
  • Модель приложения Compose, проанализированная без включенного профиля, содержит только службу foo .
  • Если профиль test включен, модель содержит сервисы bar и baz , которые включены тестовый профиль и служба foo , которая всегда включена.
  • Если включен профиль debug , модель содержит службы foo и zot , но не bar и баз и поэтому модель недействительна в отношении ограничения depend_on zot .
  • Если включены профили debug и test , модель содержит все сервисы: foo , bar , baz и zot .
  • Если реализация Compose выполняется с полосой в качестве явной службы для запуска, она и профиль теста будет активен, даже если тест профиль не включен пользователем .
  • Если реализация Compose выполняется с baz в качестве явной службы для запуска, служба baz и профиль test будет активен, а бар будет подтянут ограничением depend_on .
  • Если реализация Compose выполняется с zot в качестве явной службы для запуска, модель снова будет недействительно в отношении ограничения depend_on , равного zot так как zot и бар не имеют общих профилей перечислено.
  • Если реализация Compose выполняется с zot в качестве явной службы для запуска и включенным тестом профиля , профиль отладка автоматически включается, а служба bar подтягивается как зависимость, запускающая оба услуги зот и бар .

Версия элемента верхнего уровня

Верхний уровень версия определяется спецификацией для обратной совместимости, но носит только информативный характер.

Реализация Compose НЕ ДОЛЖНА использовать эту версию для выбора точной схемы для проверки файла Compose, но предпочитать самую последнюю схему на момент ее разработки.

Реализации Compose ДОЛЖНЫ проверять, могут ли они полностью анализировать файл Compose. Если некоторые поля неизвестны, обычно поскольку файл Compose был написан с полями, определенными в более новой версии спецификации, реализации Compose ДОЛЖЕН предупредить пользователя. Реализации Compose МОГУТ предлагать опции для игнорирования неизвестных полей (как определено в «свободном» режиме).

Имя элемента верхнего уровня

Имя верхнего уровня Имя определяется спецификацией как имя проекта, которое будет использоваться, если пользователь не задал его явно. Реализации Compose ДОЛЖНЫ предлагать пользователю способ переопределения этого имени и СЛЕДУЕТ определять механизм для вычисления имя проекта по умолчанию, которое будет использоваться, если элемент верхнего уровня name не установлен.

Всякий раз, когда имя проекта определяется именем верхнего уровня или каким-либо настраиваемым механизмом, оно ДОЛЖНО быть доступно для разрешение интерполяции и переменной среды как COMPOSE_PROJECT_NAME

 услуги:
  фу:
    изображение: бизибокс
    Окружающая среда:
      - COMPOSE_PROJECT_NAME
    команда: echo "Я запускаю ${COMPOSE_PROJECT_NAME}"
 

Элемент верхнего уровня службы

Служба — это абстрактное определение вычислительного ресурса в приложении, которое можно масштабировать/заменять. независимо от других компонентов. Сервисы поддерживаются набором контейнеров, управляемых платформой. в соответствии с требованиями к репликации и ограничениями по размещению. Службы поддерживаются контейнерами. образом Docker и набором аргументов времени выполнения. Все контейнеры в сервисе одинаково создаются с помощью этих аргументы.

Файл Compose ДОЛЖЕН объявлять корневой элемент services как карту, ключи которой являются строковыми представлениями имен служб, и чьи значения являются определениями службы. Определение службы содержит конфигурацию, которая применяется к каждому контейнер запущен для этой службы.

Каждая служба МОЖЕТ также включать раздел сборки, который определяет, как создать образ Docker для службы. Реализации Compose МОГУТ поддерживать создание образов Docker с использованием этого определения службы. Если не реализовано раздел Build СЛЕДУЕТ игнорировать, а файл Compose ДОЛЖЕН считаться действительным.

Поддержка сборки является НЕОБЯЗАТЕЛЬНЫМ аспектом спецификации Compose и подробно описано в документации по поддержке сборки.

Каждая служба определяет ограничения времени выполнения и требования для запуска своих контейнеров. разворачивают групп секций эти ограничения и позволяет платформе скорректировать стратегию развертывания, чтобы наилучшим образом соответствовать потребностям контейнеров с доступные ресурсы.

Поддержка развертывания является НЕОБЯЗАТЕЛЬНЫМ аспектом спецификации Compose и подробно описано в документации по поддержке развертывания. Если он не реализован, раздел Deploy СЛЕДУЕТ игнорировать, а файл Compose ДОЛЖЕН считаться действительным.

сборка

сборка указывает конфигурацию сборки для создания образа контейнера из исходного кода, как определено в документации по поддержке сборки.

blkio_config

blkio_config определяет набор параметров конфигурации для установки ограничений блока ввода-вывода для этой службы.

 услуги:
  фу:
    изображение: бизибокс
    blkio_config:
       вес: 300
       вес_устройство:
         - путь: /dev/sda
           вес: 400
       device_read_bps:
         - путь: /dev/sdb
           скорость: '12мб'
       device_read_iops:
         - путь: /dev/sdb
           скорость: 120
       device_write_bps:
         - путь: /dev/sdb
           скорость: '1024k'
       device_write_iops:
         - путь: /dev/sdb
           скорость: 30
 
device_read_bps, device_write_bps

Установить ограничение в байтах в секунду для операций чтения/записи на данном устройстве. Каждый элемент в списке ДОЛЖЕН иметь два ключа:

  • путь : определение символического пути к затронутому устройству.
  • rate : либо как целочисленное значение, представляющее количество байтов, либо как строка, выражающая значение байта.
device_read_iops, device_write_iops

Установить лимит операций в секунду для операций чтения/записи на данном устройстве. Каждый элемент в списке ДОЛЖЕН иметь два ключа:

  • путь : определение символического пути к затронутому устройству.
  • rate : как целочисленное значение, представляющее разрешенное количество операций в секунду.
вес

Изменить пропорцию пропускной способности, выделенной для этой службы, по сравнению с другими службами. Принимает целочисленное значение от 10 до 1000, по умолчанию — 500.

вес_устройство

Точная настройка распределения полосы пропускания по устройствам. Каждый элемент в списке должен иметь два ключа:

  • путь : определение символического пути к затронутому устройству.
  • вес : целое число от 10 до 1000.

число_процессоров

cpu_count определяет количество доступных ЦП для сервисного контейнера.

процессор_процент

cpu_percent определяет используемый процент доступных ЦП.

ЦП_доли

cpu_shares определяет (как целочисленное значение) относительный вес ЦП контейнера службы по сравнению с другими контейнерами.

период_процессора

cpu_period позволяют реализациям Compose настраивать период CPU CFS (Completely Fair Scheduler), когда платформа основана на ядре линукса.

ЦП_квота

cpu_quota позволяет реализациям Compose настраивать квоту ЦП CFS (Completely Fair Scheduler) на основе платформы на ядре линукса.

cpu_rt_runtime

cpu_rt_runtime настраивает параметры распределения ЦП для платформы с поддержкой планировщика реального времени. Может быть целочисленное значение, использующее микросекунды в качестве единиц измерения или длительности.

 cpu_rt_runtime: «400 мс»
 cpu_rt_runtime: `
 

cpu_rt_period

cpu_rt_period настраивает параметры распределения ЦП для платформы с поддержкой планировщика реального времени. Может быть целочисленное значение, использующее микросекунды в качестве единиц измерения или длительности.

 cpu_rt_period: '1400us'
 cpu_rt_период: 11000`
 

процессор

УСТАРЕЛО: используйте deploy.reservations.cpus

cpus определяют количество (потенциально виртуальных) процессоров, выделяемых сервисным контейнерам. Это дробное число. 0,000 означает отсутствие ограничений.

процессор

cpuset явно определяет ЦП, в которых разрешено выполнение. Может быть диапазоном 0-3 или списком 0,1

cap_add

cap_add указывает дополнительные возможности контейнера как струны.

 cap_add:
  - ВСЕ
 

cap_drop

cap_drop указывает возможности контейнера для удаления как струны.

 кап_дроп:
  - NET_ADMIN
  - SYS_АДМИН
 

cgroup_parent

cgroup_parent указывает НЕОБЯЗАТЕЛЬНУЮ родительскую cgroup для контейнера.

 cgroup_parent: m-executor-abcd
 

команда

команда переопределяет команду по умолчанию, объявленную образом контейнера (т.е. CMD Dockerfile).

Команда
: bundle exec thin -p 3000
 

Команда также может быть списком, аналогично Dockerfile:

Команда
: ["bundle", "exec", "thin", "-p", "3000"]
 

конфигов

конфигураций предоставление доступа к конфигурациям для каждой службы с использованием конфигураций для каждой службы конфигурация. Поддерживаются два различных варианта синтаксиса.

Реализации Compose ДОЛЖНЫ сообщать об ошибке, если конфигурация не существует на платформе или не определена в configs раздел этого файла Compose.

Для конфигураций определены два синтаксиса. Чтобы оставаться совместимым с этой спецификацией, реализация ДОЛЖЕН поддерживать оба синтаксиса. Реализации ДОЛЖНЫ разрешать использование как короткого, так и длинного синтаксиса в одном документе.

Краткий синтаксис

Вариант с коротким синтаксисом указывает только имя конфигурации. Это дает контейнерный доступ к конфигу и монтирует его по адресу / внутри контейнера. Имя источника и целевая точка монтирования установлены к имени конфигурации.

В следующем примере используется короткий синтаксис для предоставления службы redis . доступ к конфигам my_config и my_other_config . Значение my_config устанавливается на содержимое файла ./my_config.txt и my_other_config определяется как внешний ресурс, что означает, что он уже определены в платформе. Если внешний конфиг не существует, развертывание ДОЛЖНО завершиться неудачно.

 услуги:
  редис:
    изображение: redis: последний
    конфиги:
      - мой_конфиг
конфиги:
  моя_конфигурация:
    файл: ./my_config.txt
  мой_другой_конфиг:
    внешний: правда
 
Длинный синтаксис

Длинный синтаксис обеспечивает большую детализацию того, как создается конфигурация в контейнерах задач службы.

  • источник : Имя конфигурации, существующее на платформе.
  • target : Путь и имя файла, который нужно смонтировать в сервисе контейнеры задач. По умолчанию /<источник> , если не указано иное.
  • uid и gid : числовой UID или GID, которому принадлежит подключенный файл конфигурации. внутри контейнеров задач службы. Значение по умолчанию, если оно не указано, — работающий контейнер USER.
  • режим : Разрешения для файла, смонтированного в сервисе контейнеры задач в восьмеричной системе счисления. Значение по умолчанию доступно для чтения всем ( 0444 ). Доступный для записи бит ДОЛЖЕН игнорироваться. Исполняемый бит может быть установлен.

В следующем примере имя my_config устанавливается на redis_config в контейнер, устанавливает режим 0440 (доступен для чтения группой) и устанавливает пользователя и группу к 103 . Служба redis не имеет доступа к my_other_config конфиг.

 услуги:
  редис:
    изображение: redis: последний
    конфиги:
      - источник: my_config
        цель: /redis_config
        ИД: "103"
        гид: "103"
        режим: 0440
конфиги:
  моя_конфигурация:
    внешний: правда
  мой_другой_конфиг:
    внешний: правда
 

Вы можете предоставить службе доступ к нескольким конфигурациям, а также использовать длинный и короткий синтаксис.

имя_контейнера

имя_контейнера — это строка, указывающая имя пользовательского контейнера, а не сгенерированное имя по умолчанию.

 имя_контейнера: мой-веб-контейнер
 

Реализация Compose НЕ ДОЛЖНА масштабировать службу за пределы одного контейнера, если файл Compose указывает имя_контейнера . Попытка сделать это ДОЛЖНА привести к ошибке.

Если присутствует, имя_контейнера СЛЕДУЕТ использовать формат регулярного выражения [a-zA-Z0-9][a-zA-Z0-9_.-]+

credential_spec

credential_spec настраивает спецификацию учетных данных для управляемой учетной записи службы.

Реализации Compose, поддерживающие службы с использованием контейнеров Windows, ДОЛЖНЫ поддерживать файл : и Реестр : протоколы для credential_spec. Реализации Compose МОГУТ также поддерживать дополнительные протоколы для пользовательских вариантов использования.

credential_spec должен быть в формате file:// или register:// .

 учетные_спецификации:
  файл: my-credential-spec. json
 

При использовании реестра: спецификация учетных данных считывается из реестра Windows на хозяин демона. Значение реестра с заданным именем должно находиться по адресу:

.
 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\Containers\CredentialSpecs
 

В следующем примере спецификация учетных данных загружается из значения с именем my-credential-spec . в реестре:

 учетные_спецификации:
  реестр: my-credential-spec
 
Пример конфигурации gMSA

При настройке спецификации учетных данных gMSA для службы вам нужно только чтобы указать спецификацию учетных данных с config , как показано в следующем примере:

 услуги:
  моя служба:
    изображение: мое изображение: последнее
    Credential_spec:
      конфигурация: my_credential_spec
конфиги:
  my_credentials_spec:
    файл: ./my-credential-spec.json|
 

зависит от

depend_on выражает зависимости запуска и завершения работы между службами.

Краткий синтаксис

Вариант с коротким синтаксисом указывает только имена служб зависимостей. Зависимости службы вызывают следующее поведение:

  • Реализации Compose ДОЛЖНЫ создавать службы в порядке зависимости. В следующих например, db и redis создаются до web .

  • Реализации Compose ДОЛЖНЫ удалять службы в порядке зависимости. В следующих например, web удален до дб и редис .

Простой пример:

 услуги:
  веб:
    строить: .
    зависит от:
      - дб
      - редис
  редис:
    изображение: редис
  дБ:
    изображение: постгрес
 

Реализации Compose ДОЛЖНЫ гарантировать, что службы зависимостей были запущены до запуск зависимой службы. Реализации Compose МОГУТ ждать, пока службы зависимостей будут «готовы», прежде чем запуск зависимой службы.

Длинный синтаксис

Синтаксис длинной формы позволяет настраивать дополнительные поля, которые нельзя выражается в краткой форме.

  • условие : условие, при котором зависимость считается выполненной
    • service_started : эквивалент краткого синтаксиса, описанного выше
    • service_healthy : указывает, что ожидается, что зависимость будет «работоспособной». (как указано Healthcheck) перед запуском зависимого оказание услуг.
    • service_completed_successful : указывает, что ожидается выполнение зависимости до успешного завершения перед запуском зависимой службы.

Зависимости службы вызывают следующее поведение:

  • Реализации Compose ДОЛЖНЫ создавать службы в порядке зависимости. В следующих например, db и redis создаются до web .

  • Реализации Compose ДОЛЖНЫ ждать проверки работоспособности для передачи зависимостей помечен service_healthy . В следующем примере ожидается, что db быть «здоровым» до сеть создана.

  • Реализации Compose ДОЛЖНЫ удалять службы в порядке зависимости. В следующих например, web удаляется перед db и redis .

Простой пример:

 услуги:
  веб:
    строить: .
    зависит от:
      дБ:
        состояние: service_healthy
      редис:
        условие: service_started
  редис:
    изображение: редис
  дБ:
    изображение: постгрес
 

Реализации Compose ДОЛЖНЫ гарантировать, что службы зависимостей были запущены до запуск зависимой службы. Реализации Compose ДОЛЖНЫ гарантировать службы зависимостей, отмеченные service_healthy являются «исправными» перед запуском зависимой службы.

развертывание

deploy указывает конфигурацию для развертывания и жизненного цикла служб, как определено здесь.

устройство_cgroup_rules

device_cgroup_rules определяет список правил контрольной группы устройств для этого контейнера. Это тот же формат, который ядро ​​Linux указывает в контрольных группах. Контроллер белого списка устройств.

 device_cgroup_rules:
  - 'с 1:3 г'
  - 'а 7:* рмв'
 

устройств

устройств определяет список сопоставлений устройств для созданных контейнеров в виде HOST_PATH:CONTAINER_PATH[:CGROUP_PERMISSIONS] .

 устройств:
  - "/dev/ttyUSB0:/dev/ttyUSB0"
  - "/dev/sda:/dev/xvda:rwm"
 

днс

dns определяет настраиваемые DNS-серверы для установки в конфигурации сетевого интерфейса контейнера. Может быть одним значением или списком.

 днс: 8.8.8.8
 
 DNS:
  - 8.8.8.8
  - 9.9.9.9
 

DNS_opt

dns_opt список настраиваемых параметров DNS, которые будут переданы преобразователю DNS контейнера (файл /etc/resolv.conf в Linux).

 dns_opt:
  - использовать-VC
  - нет-TLD-запрос
 

dns_search

dns определяет настраиваемые домены поиска DNS для установки в конфигурации сетевого интерфейса контейнера. Может быть одним значением или списком.

 dns_search: example.com
 
 dns_search:
  - dc1.example.com
  - dc2.example.com
 

доменное имя

имя_домена объявляет собственное доменное имя для контейнера службы. ДОЛЖНО быть действительным именем хоста RFC 1123.

точка входа

точка входа переопределяет точку входа по умолчанию для образа Docker (т. е. ENTRYPOINT , установленную Dockerfile). Реализации Compose ДОЛЖНЫ удалить любую команду по умолчанию в образе Docker — как ENTRYPOINT , так и CMD . в Dockerfile - когда точка входа настраивается с помощью файла Compose. Если также установлена ​​команда , он используется в качестве параметра точки входа в качестве замены для образа Docker CMD

.
 точка входа: /code/entrypoint.sh
 

Точка входа также может быть списком, аналогично Докерфайл:

 точка входа:
  - пхп
  - -д
  - zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug. so
  - -д
  - memory_limit=-1
  - продавец/бен/phpunit
 

env_file

env_file добавляет переменные среды в контейнер на основе содержимого файла.

 env_file: .env
 

env_file также может быть списком. Файлы в списке ДОЛЖНЫ обрабатываться сверху вниз. Для той же переменной указано в двух файлах env, ДОЛЖНО стоять значение из последнего файла в списке.

 env_file:
  - ./a.env
  - ./b.env
 

Относительный путь ДОЛЖЕН быть разрешен из родительской папки файла Compose. Поскольку абсолютные пути не позволяют Compose чтобы файл не был переносимым, реализациям Compose СЛЕДУЕТ предупреждать пользователей, когда такой путь используется для установки env_file .

Переменные среды, объявленные в разделе среды ДОЛЖНЫ переопределять эти значения — это остается верным, даже если эти значения пусто или не определено.

Env_file формат

Каждая строка в файле env ДОЛЖНА быть в формате VAR[=[VAL]] . Строки, начинающиеся с # , ДОЛЖНЫ игнорироваться. Пустые строки ДОЛЖНЫ также игнорироваться.

Значение VAL используется как необработанная строка и вообще не изменяется. Если значение заключено в кавычки (как это часто бывает с переменными оболочки), кавычки ДОЛЖНЫ быть включает в значение, передаваемое в контейнеры созданный реализацией Compose.

VAL МОЖЕТ быть опущено, в таких случаях значение переменной является пустой строкой. =VAL МОЖЕТ быть опущено, в таких случаях переменная не установлена ​​ .

 # Установить среду Rails/Rack
RACK_ENV=разработка
VAR="в кавычках"
 

окружающая среда

среда определяет набор переменных среды в контейнере. среда может использовать либо массив, либо карта. Любые логические значения; правда, ложь, да, нет, СЛЕДУЕТ заключать в кавычки, чтобы гарантировать они не преобразуются в True или False парсером YAML.

Переменные среды МОГУТ быть объявлены одним ключом (без значения знака равенства). В таком случае реализации ДОЛЖНЫ полагаться на некоторое взаимодействие с пользователем для разрешения значения. Если это не так, переменная не установлен и будет удален из среды контейнера служб.

Синтаксис карты:

 среда:
  RACK_ENV: разработка
  ШОУ: "правда"
  ПОЛЬЗОВАТЕЛЬ_ВВОД:
 

Синтаксис массива:

 среда:
  - RACK_ENV=разработка
  - ПОКАЗАТЬ=истина
  - USER_INPUT
 

Если для службы установлены как env_file , так и среда , значения, установленные средой , имеют приоритет.

разоблачить

expose определяет порты, которые реализации Compose ДОЛЖНЫ предоставлять из контейнера. Эти порты ДОЛЖНЫ быть доступны для связанных служб и НЕ ДОЛЖНЫ публиковаться на хост-компьютере. Только внутренний контейнер можно указать порты.

 разоблачить:
  - "3000"
  - "8000"
 

удлиняет

Расширить другую службу в текущем файле или в другом, при необходимости переопределяя конфигурацию. Вы можете использовать расширяет на любую службу вместе с другими ключами конфигурации. Значение extends ДОЛЖНО быть отображением определяется с помощью обязательной службы и дополнительного файла ключа.

 расширяет:
  файл: common.yml
  сервис: веб-приложение
 

Если поддерживается, реализации Compose ДОЛЖНЫ обрабатывать , расширяя следующим образом:

  • служба определяет имя службы, на которую ссылаются как на базу, например web или база данных .
  • файл — это расположение файла конфигурации Compose, определяющего эту службу.
Ограничения

К службе, на которую делается ссылка, применяются следующие ограничения:

  • Службы, зависящие от других служб, не могут использоваться в качестве основы. Поэтому любой ключ который вводит зависимость от другого сервиса, несовместим с расширяет . неполный список таких ключей: ссылки , volumes_from , контейнер режим (в ipc , pid , network_mode и net ), service mode (в ipc , pid и network_mode ), depend_on .
  • Службы не могут иметь циклические ссылки с расширением

Реализации Compose ДОЛЖНЫ возвращать ошибку во всех этих случаях.

Поиск указанной службы

файл значение может быть:

  • Нет. Это указывает на то, что имеется ссылка на другую службу в том же файле Compose.
  • Путь к файлу, который может быть:
    • Относительный путь. Этот путь рассматривается как относительный к местоположению главного Compose. файл.
    • Абсолютный путь.

Служба, обозначенная служба , ДОЛЖНА присутствовать в указанном файле Compose. Реализации Compose ДОЛЖНЫ возвращать ошибку, если:

  • Служба, обозначенная служба , не найдена
  • Создать файл, обозначенный , файл не найден
Объединение определений службы

Два определения службы ( основное одно в текущем файле Compose и указанное одно указанный расширяет ) ДОЛЖЕН быть объединен следующим образом:

    Сопоставления
  • : ключи в сопоставлениях основных ключей переопределения определения службы в сопоставлениях из ссылается на определение службы . Ключи, которые не переопределены, включены как есть.
  • Последовательности: элементы объединяются в новую последовательность. Порядок элементов сохранено с ссылками, элементами идут первыми и основными элементами после.
  • Скаляры: ключи в основном определении службы имеют приоритет над ключами в ссылается на один.
Сопоставления

Следующие ключи следует рассматривать как сопоставления: build. args , build.labels , build.extra_hosts , deploy.labels , deploy.update_config , deploy.rollback_config , deploy.restart_policy , deploy.resources.limits , среда , проверка работоспособности , метки , logging.options , sysctls , storage_opt , extra_hosts , ulimits .

Одно исключение, применимое к Healthcheck заключается в том, что основное сопоставление не может указать disable: true , если только не ссылается на сопоставление , также указывает disabled: true . Написать реализации ДОЛЖНЫ возвращать ошибку в этом случае.

Например, ввод ниже:

 услуги:
  общий:
    изображение: бизибокс
    Окружающая среда:
      TZ: UTC
      ПОРТ: 80
  Кли:
    расширяет:
      обслуживание: общее
    Окружающая среда:
      ПОРТ: 8080
 

Производит следующую конфигурацию для кли сервис. Такой же вывод создается, если используется синтаксис массива.

 среда:
  ПОРТ: 8080
  TZ: UTC
изображение: бизибокс
 

Элементы под blkio_config.device_read_bps , blkio_config.device_read_iops , blkio_config.device_write_bps , blkio_config.device_write_iops , устройства и Тома также рассматриваются как сопоставления, где ключ — это целевой путь внутри контейнер.

Например, ввод ниже:

 услуги:
  общий:
    изображение: бизибокс
    тома:
      - общий том:/var/lib/backup/data:rw
  Кли:
    расширяет:
      обслуживание: общее
    тома:
      - cli-volume:/var/lib/backup/data:ro
 

Создает следующую конфигурацию для службы cli . Обратите внимание, что смонтированный путь теперь указывает на новое имя тома, и был применен флаг ro .

 изображение: занятбокс
тома:
- cli-volume:/var/lib/backup/data:ro
 

Если есть ссылка на определение службы содержит , расширяет сопоставление , элементы под ним просто копируются в новое объединенное определение . Затем процесс слияния прерывается снова выключается до тех пор, пока не останется расширений ключей.

Например, ввод ниже:

 услуги:
  база:
    изображение: бизибокс
    пользователь: корень
  общий:
    изображение: бизибокс
    расширяет:
      сервис: база
  Кли:
    расширяет:
      обслуживание: общее
 

Производит следующую конфигурацию для кли сервис. Здесь кли сервисов получает пользовательский ключ от общего сервиса , который, в свою очередь, получает этот ключ от базы оказание услуг.

 изображение: занятбокс
пользователь: корень
 
Последовательности

Следующие ключи следует рассматривать как последовательности: cap_add , cap_drop , configs , deploy.placement.constraints , deploy.placement.preferences , deploy.reservations.generic_resources , device_cgroup_rules , выставить , external_links , порты , секреты , security_opt . Любые дубликаты, полученные в результате слияния, удаляются, так что последовательность остается только содержит уникальные элементы.

Например, ввод ниже:

 услуги:
  общий:
    изображение: бизибокс
    security_opt:
      - метка: роль: РОЛЬ
  Кли:
    расширяет:
      обслуживание: общее
    security_opt:
      - метка:пользователь:ПОЛЬЗОВАТЕЛЬ
 

Создает следующую конфигурацию для службы cli .

 изображение: занятбокс
security_opt:
- метка: роль: РОЛЬ
- метка:пользователь:ПОЛЬЗОВАТЕЛЬ
 

Если используется синтаксис списка, следующие ключи также следует рассматривать как последовательности: dns , dns_search , env_file , tmpfs . В отличие от полей последовательности, упомянутых выше, дубликаты, полученные в результате слияния, не удаляются.

Скаляры

Любые другие разрешенные ключи в определении службы должны рассматриваться как скаляры.

внешние_ссылки

external_links связать контейнеры служб со службами, управляемыми вне этого приложения Compose. external_links определяют имя существующей службы для извлечения с использованием механизма поиска платформы. Можно указать псевдоним вида SERVICE:ALIAS .

 внешних_ссылок:
  - редис
  - база данных: mysql
  - база данных: postgresql
 

extra_hosts добавляет сопоставления имен хостов в конфигурацию сетевого интерфейса контейнера ( /etc/hosts для Linux). Значения ДОЛЖНЫ устанавливать имя хоста и IP-адрес для дополнительных хостов в форме HOSTNAME:IP .

 дополнительных_хостов:
  - "какой-то хост: 162.242.195.82"
  - "другой хост: 50.31.209.229"
 

Реализации Compose ДОЛЖНЫ создать соответствующую запись с IP-адресом и именем хоста в сети контейнера. конфигурация, что означает, что для Linux /etc/hosts получит дополнительные строки:

 162.242.195.82 какой-то хост
50.31.209.229 другой хост
 

группа_добавить

group_add указывает дополнительные группы (по имени или номеру), членом которых ДОЛЖЕН быть пользователь внутри контейнера.

Примером того, где это полезно, является ситуация, когда несколько контейнеров (работающих от имени разных пользователей) должны читать или писать тот же файл на общем томе. Этот файл может принадлежать группе, совместно используемой всеми контейнерами, и указан в группа_добавить .

 услуги:
  моя служба:
    изображение: альпийский
    группа_добавить:
      - почта
 

Запуск id внутри созданного контейнера ДОЛЖЕН показывать, что пользователь принадлежит к группе почты , которая не имела бы было бы так, если бы group_add не были объявлены.

проверка здоровья

Healthcheck объявляет проверку, которая запускается, чтобы определить, являются ли контейнеры для этого обслуживание «здоровое». Это отменяет Инструкция HEALTHCHECK Dockerfile устанавливается образом Docker сервиса.

 проверка здоровья:
  тест: ["CMD", "curl", "-f", "http://localhost"]
  интервал: 1м30с
  тайм-аут: 10 сек. 
  повторы: 3
  start_period: 40 с
 

interval , timeout и start_period указаны как длительности.

test определяет команду, которую реализация Compose будет запускать для проверки работоспособности контейнера. Может быть либо строка, либо список. Если это список, первым элементом должен быть либо NONE , либо CMD , либо CMD-SHELL . Если это строка, это эквивалентно указанию CMD-SHELL , за которым следует эта строка.

 # Заходим в локальное веб-приложение
тест: ["CMD", "curl", "-f", "http://localhost"]
 

Использование CMD-SHELL запустит команду, сконфигурированную как строку, используя оболочку контейнера по умолчанию. ( /bin/sh для Linux). Обе приведенные ниже формы эквивалентны:

 тест: ["CMD-SHELL", "curl -f http://localhost || выход 1"]
 
Тест
: curl -f https://localhost || выход 1
 

НЕТ отключить проверку работоспособности и в основном полезно отключить проверку работоспособности, установленную для образа. Альтернативно проверка здоровья, установленная изображением, может быть отключена установкой отключить: правда :

 проверка здоровья:
  отключить: правда
 

имя хоста

имя хоста объявляет пользовательское имя хоста для контейнера службы. ДОЛЖНО быть действительным именем хоста RFC 1123.

изображение

image указывает образ, с которого начинается контейнер. Изображение ДОЛЖНО соответствовать спецификации Open Container. адресный формат изображения, как [/][/][:|@] .

 изображение: редис
    изображение: редис: 5
    изображение: redis@sha256:0ed5d5928d4737458944eb604cc8509e245c3e19d02ad83
8bc4b991aac7 изображение: библиотека/redis изображение: docker.io/library/redis изображение: my_private.registry:5000/redis

Если образ не существует на платформе, реализации Compose ДОЛЖНЫ попытаться извлечь его на основе pull_policy . Реализации Compose с поддержкой сборки МОГУТ предлагать конечным пользователям альтернативные варианты управления приоритетом pull для создания образа из исходного кода, однако извлечение образа ДОЛЖНО быть поведением по умолчанию.

image МОЖЕТ быть исключен из файла Compose, если объявлен раздел build . Составление реализаций без поддержки сборки ДОЛЖЕН завершиться ошибкой, если изображение отсутствует в файле Compose.

инициализация

init запустить процесс инициализации (PID 1) внутри контейнера, который пересылает сигналы и собирает процессы. Установите для этого параметра значение true , чтобы включить эту функцию для службы.

 услуги:
  веб:
    изображение: альпийский: последний
    инициализация: правда
 

Используемый двоичный файл инициализации зависит от платформы.

МПК

ipc настраивает режим изоляции IPC, установленный сервисным контейнером. Доступный значения зависят от платформы, но спецификация Compose определяет конкретные значения который ДОЛЖЕН быть реализован, как описано, если поддерживается:

  • совместно используемый , который предоставляет контейнеру собственное пространство имен IPC с возможность поделиться им с другими контейнерами.
  • служба: {имя} , который заставляет контейнер присоединяться к другому ( совместно используемый ) пространство имен IPC контейнера.
 ipc: "общий доступ"
    ipc: "сервис: [имя сервиса]"
 

изоляция

изоляция определяет технологию изоляции контейнера. Поддерживаемые значения зависят от платформы.

этикетки

метки добавляют метаданные в контейнеры. Вы можете использовать либо массив, либо карту.

Рекомендуется использовать обратную DNS-нотацию, чтобы ваши метки не конфликтовали с те, которые используются другим программным обеспечением.

 этикеток:
  com.example.description: "Бухгалтерское веб-приложение"
  com.example.department: "Финансы"
  com.example.label-with-empty-value: ""
 
 этикеток:
  - "com.example.description=Бухгалтерское веб-приложение"
  - "com.example.department=Финансы"
  - "com.example.label-with-empty-value"
 

Реализации Compose ДОЛЖНЫ создавать контейнеры с каноническими метками:

  • com.docker.compose.project установить для всех ресурсов, созданных реализацией Compose, имя пользовательского проекта
  • com.docker.compose.service установлен в контейнерах службы с именем службы, как определено в файле Compose

Префикс метки com.docker.compose зарезервирован. Указание меток с этим префиксом в файле Compose ДОЛЖНО привести к ошибке времени выполнения.

ссылок

ссылки определяет сетевую ссылку на контейнеры в другой службе. Либо укажите как имя службы, так и псевдоним ссылки ( SERVICE:ALIAS ) или просто имя службы.

 веб:
  ссылки:
    - дб
    - БД: база данных
    - редис
 

Контейнеры для связанной службы ДОЛЖНЫ быть доступны по имени хоста, идентичному псевдониму или имени службы. если псевдоним не был указан.

Ссылки не требуются для связи служб — если не задана конкретная конфигурация сети, любая служба ДОЛЖНА иметь возможность связаться с любой другой службой по имени этой службы в сети по умолчанию . Если услуги объявлять сети, к которым они подключены, ссылки НЕ ДОЛЖНЫ переопределять сетевую конфигурацию и службы, не подключенные к общей сети, НЕ ДОЛЖНЫ иметь возможность общаться. Реализации Compose НЕ МОГУТ предупреждать пользователя об этом несоответствии конфигурации.

Ссылки также выражают неявную зависимость между службами так же, как depend_on, поэтому они определяют порядок запуска службы.

регистрация

ведение журнала определяет конфигурацию ведения журнала для службы.

 ведение журнала:
  драйвер: системный журнал
  опции:
    syslog-адрес: "tcp://192. 168.0.42:123"
 

Имя драйвера указывает драйвер ведения журнала для контейнеров службы. Значения по умолчанию и доступные значения зависят от платформы. Специальные параметры драйвера можно задать с помощью параметров в виде пар ключ-значение.

сетевой_режим

network_mode установить сетевой режим сервисных контейнеров. Доступные значения зависят от платформы, но Compose Спецификация определяет конкретные значения, которые ДОЛЖНЫ быть реализованы, как описано, если они поддерживаются:

  • нет , которые отключают все контейнерные сети
  • хост , который предоставляет контейнеру необработанный доступ к сетевому интерфейсу хоста
  • служба: {имя} , которая предоставляет контейнерам доступ только к указанной службе
 network_mode: "хост"
    network_mode: "нет"
    network_mode: "сервис: [имя сервиса]"
 

сетей

сетей определяет сети, к которым подключены сервисные контейнеры, ссылаясь на записи в высший уровень сети ключ.

 услуги:
  какой-то сервис:
    сети:
      - какая-то сеть
      - другая-сеть
 
псевдонимы

псевдонимы объявляют альтернативные имена хостов для этой службы в сети. Другие контейнеры на том же network может использовать либо имя службы, либо этот псевдоним для подключения к одному из контейнеров службы.

Поскольку псевдонимы относятся к сети, одна и та же служба может иметь разные псевдонимы в разных сетях.

Примечание . Общесетевой псевдоним может совместно использоваться несколькими контейнерами и даже несколькими службами. Если это так, то точно не гарантируется, в какой именно контейнер разрешается имя.

Здесь показан общий формат:

 услуги:
  какой-то сервис:
    сети:
      какая-то сеть:
        псевдонимы:
          - псевдоним1
          - псевдоним3
      другая сеть:
        псевдонимы:
          - псевдоним2
 

В приведенном ниже примере служба 9Внешний интерфейс 0413 сможет подключиться к внутреннему сервису по адресу имя хоста серверная часть или база данных в сети заднего уровня и служба мониторинга сможет получить доступ к той же серверной службе по адресу db или mysql в сети admin .

 услуги:
  внешний интерфейс:
    изображение: круто/веб-приложение
    сети:
      - передний ярус
      - задний ярус
  мониторинг:
    изображение: круто/мониторинг
    сети:
      - администратор
  серверная часть:
    изображение: круто/бэкенд
    сети:
      задний уровень:
        псевдонимы:
          - база данных
      администратор:
        псевдонимы:
          - mysql
сети:
  передний ряд:
  задний уровень:
  администратор:
 
ipv4_адрес, ipv6_адрес

Укажите статический IP-адрес для контейнеров для этой службы при подключении к сети.

Соответствующая конфигурация сети в разделе сетей верхнего уровня ДОЛЖНА иметь Блок ipam с настройками подсети, охватывающими каждый статический адрес.

 услуги:
  внешний интерфейс:
    изображение: круто/веб-приложение
    сети:
      передний ряд:
        ipv4_адрес: 172.16.238.10
        ipv6_адрес: 2001:3984:3989::10
сети:
  передний ряд:
    IPAM:
      драйвер: по умолчанию
      конфигурация:
        - подсеть: "172. 16.238.0/24"
        - подсеть: "2001:3984:3989::/64"
 
link_local_ips

link_local_ips указывает список локальных IP-адресов. Link-local IP-адреса — это специальные IP-адреса, принадлежащие известной подсети и полностью управляются оператором, обычно в зависимости от архитектуры, в которой они находятся. развернут. Реализация зависит от платформы.

Пример:

 услуги:
  приложение:
    изображение: бизибокс
    команда: сверху
    сети:
      приложение_сеть:
        link_local_ips:
          - 57.123.22.11
          - 57.123.22.13
сети:
  приложение_сеть:
    водитель: мост
 
приоритет

приоритет указывает, в каком порядке реализации Compose СЛЕДУЕТ подключать контейнеры службы к своим сети. Если не указано, значение по умолчанию равно 0,

.

В следующем примере служба приложений сначала подключается к app_net_1, так как она имеет наивысший приоритет. Затем он подключается к app_net_3, затем к app_net_2, который использует значение приоритета по умолчанию 0,

.
 услуги:
  приложение:
    изображение: бизибокс
    команда: сверху
    сети:
      приложение_net_1:
        приоритет: 1000
      приложение_net_2:
      приложение_net_3:
        приоритет: 100
сети:
  приложение_net_1:
  приложение_net_2:
  приложение_net_3:
 

мак_адрес

mac_address устанавливает MAC-адрес для сервисного контейнера.

лимит_памяти

УСТАРЕЛО: используйте deploy.limits.memory

mem_reservation

УСТАРЕЛО: используйте deploy.reservations.memory

mem_swappiness

mem_swappiness определяет в процентах (значение от 0 до 100) для выгрузки ядра хоста анонимные страницы памяти, используемые контейнером.

  • значение 0 отключает анонимный обмен страницами.
  • значение 100 делает все анонимные страницы заменяемыми.

Значение по умолчанию зависит от платформы.

memswap_limit

memswap_limit определяет объем контейнера памяти, который разрешено выгружать на диск. Это модификатор атрибут, который имеет значение, только если память также установлена. Использование подкачки позволяет контейнеру записывать лишнее требования к памяти на диск, когда контейнер исчерпал всю доступную ему память. Существует потеря производительности для приложений, которые часто подкачивают память на диск.

  • Если для memswap_limit задано положительное целое число, то ДОЛЖНЫ быть установлены как memory , так и memswap_limit . memswap_limit представляет собой общий объем памяти и подкачки, которые могут быть использованы, а memory управляет объемом используемой памяти без подкачки. Таким образом, если memory = «300m» и memswap_limit = «1g», контейнер может использовать 300m памяти и 700m (1g - 300m) подкачки.
  • Если для параметра memswap_limit установлено значение 0, этот параметр ДОЛЖЕН игнорироваться, а значение считается неустановленным.
  • Если для memswap_limit установлено то же значение, что и для memory , а для memory задано положительное целое число, контейнер не имеет доступа к подкачке. См. раздел Предотвращение использования контейнера подкачки.
  • Если memswap_limit не задан, а memory установлен, контейнер может использовать столько подкачки, сколько указано в настройке memory , если в хост-контейнере настроена память подкачки. Например, если memory = «300m» и memswap_limit не установлен, контейнер может использовать в общей сложности 600 м памяти и подкачки.
  • Если для memswap_limit явно установлено значение -1, контейнеру разрешено использовать неограниченный обмен до суммы, доступной в хост-системе.

oom_kill_disable

Если установлено oom_kill_disable Реализация Composite ДОЛЖНА настроить платформу так, чтобы она не убивала контейнер в случае голодания памяти.

oom_score_adj

oom_score_adj настраивает приоритет уничтожения контейнеров платформой в случае нехватки памяти. Значение ДОЛЖНО находиться в диапазоне [-1000,1000].

идентификатор

pid устанавливает режим PID для контейнера, созданного реализацией Compose. Поддерживаемые значения зависят от платформы.

pids_limit

УСТАРЕЛО: используйте deploy.reservations.pids

pids_limit настраивает ограничение PID контейнера. Установите значение -1 для неограниченного количества PID.

 pids_limit: 10
 

платформа

платформа определяет контейнеры целевой платформы для этой службы, используя синтаксис os[/arch[/variant]] . Реализация Compose ДОЛЖНА использовать этот атрибут при объявлении, чтобы определить, какая версия изображения будет извлечена. и/или на какой платформе будет выполняться сборка сервиса.

Платформа
: osx
платформа: windows/amd64
платформа: линукс/arm64/v8
 

портов

Открывает контейнерные порты. Отображение портов НЕ ДОЛЖНО использоваться с network_mode: хост , и это ДОЛЖНО привести к ошибке времени выполнения.

Краткий синтаксис

Краткий синтаксис представляет собой строку, разделенную двоеточием, для установки IP-адреса хоста, порта хоста и порта контейнера. в форме:

[ХОСТ:]КОНТЕЙНЕР[/ПРОТОКОЛ] , где:

  • HOST is [IP:](port | range)
  • КОНТЕЙНЕР порт | диапазон
  • ПРОТОКОЛ для ограничения порта указанным протоколом. значения tcp и udp определяются спецификацией, Реализации Compose МОГУТ предлагать поддержку имен протоколов для конкретных платформ.

IP-адрес хоста, если он не задан, ДОЛЖЕН быть привязан ко всем сетевым интерфейсам. Порт может быть один значение или диапазон. Хост и контейнер ДОЛЖНЫ использовать эквивалентные диапазоны.

Либо укажите оба порта ( HOST:CONTAINER ), либо только порт контейнера. В последнем случае Реализации Compose СЛЕДУЕТ автоматически выделять любой неназначенный хост-порт.

HOST:CONTAINER СЛЕДУЕТ всегда указывать в виде строки (в кавычках) во избежание конфликтов с поплавком yaml base-60.

Образцы:

 портов:
  - "3000"
  - "3000-3005"
  - "8000:8000"
  - "9090-9091:8080-8081"
  - "49100:22"
  - "127.0.0.1:8001:8001"
  - "127.0.0.1:5000-5010:5000-5010"
  - "6060:6060/удп"
 

Примечание : сопоставление IP-адресов хоста МОЖЕТ не поддерживаться на платформе, в этом случае реализациям Compose СЛЕДУЕТ отклонять файл Compose и ДОЛЖЕН сообщить пользователю, что он будет игнорировать указанный IP-адрес хоста.

Длинный синтаксис

Синтаксис длинной формы позволяет настраивать дополнительные поля, которые нельзя выражается в краткой форме.

  • цель : контейнерный порт
  • опубликовано : общедоступный порт. Может быть установлен как диапазон с использованием синтаксиса start-end , тогда фактический порт ДОЛЖЕН быть назначен в этом диапазоне на основе доступных портов.
  • host_ip : сопоставление IP-адреса хоста, не указано, означает, что все сетевые интерфейсы ( 0.0.0.0 )
  • протокол : протокол порта ( tcp или udp ), не указан означает любой протокол
  • режим : хост для публикации порта хоста на каждом узле или вход для балансировки нагрузки порта.
 портов:
  - цель: 80
    host_ip: 127.0.0.1
    опубликовано: 8080
    протокол: TCP
    режим: хост
  - цель: 80
    host_ip: 127.0.0.1
    опубликовано: 8000-9000
    протокол: TCP
    режим: хост
 

привилегированный

привилегированный настраивает контейнер службы для запуска с повышенными привилегиями. Поддержка и фактические последствия зависят от платформы.

профилей

профили определяет список именованных профилей для включения службы. Если не установлено, служба всегда включена.

Если присутствует, профили ДОЛЖНЫ следовать формату регулярного выражения [a-zA-Z0-9][a-zA-Z0-9_.-]+ .

pull_policy

pull_policy определяет решения, которые будут принимать реализации Compose, когда он начнет извлекать изображения. Возможные значения:

  • всегда : Реализации Compose ДОЛЖНЫ всегда извлекать образ из реестра.
  • никогда : Реализации Compose НЕ ДОЛЖНЫ извлекать образ из реестра и СЛЕДУЕТ полагаться на кешированный образ платформы. Если нет кэшированного изображения, НЕОБХОДИМО сообщить об ошибке.
  • отсутствует : Реализациям Compose СЛЕДУЕТ извлекать образ, только если он недоступен в кэше платформы. Это СЛЕДУЕТ использовать по умолчанию для реализации Compose без поддержки сборки. if_not_present СЛЕДУЕТ рассматривать псевдоним для этого значения для обратной совместимости
  • сборка : реализациям Compose СЛЕДУЕТ создавать образ. Реализации Compose СЛЕДУЕТ перестраивать образ, если он уже существует.

Если pull_policy и сборка оба представлены, реализации Compose ДОЛЖНЫ создавать образ по умолчанию. Реализации Compose МОГУТ переопределить это поведение в цепочке инструментов.

только для чтения

read_only настраивает создание сервисного контейнера с файловой системой, доступной только для чтения.

перезагрузка

перезапуск определяет политику, которую платформа будет применять при завершении работы контейнера.

  • нет : политика перезапуска по умолчанию. Ни при каких обстоятельствах не перезапускает контейнер.
  • всегда : Политика всегда перезапускает контейнер до его удаления.
  • при сбое : политика перезапускает контейнер, если код выхода указывает на ошибку.
  • если не остановлено : политика перезапускает контейнер независимо от кода выхода, но останавливается перезапуск при остановке или удалении службы.
 перезапуск: "нет"
    перезапуск: всегда
    перезапуск: при сбое
    перезапуск: если не остановлен
 

время выполнения

среда выполнения указывает, какую среду выполнения следует использовать для контейнеров службы.

Значение среды выполнения зависит от реализации. Например, среда выполнения может быть именем реализации спецификации среды выполнения OCI, такой как «runc».

 веб:
  изображение: busybox: последний
  команда: правда
  время выполнения: runc
 

шкала

УСТАРЕЛО: используйте развертывание/реплики

масштаб указывает количество контейнеров по умолчанию для развертывания для этой службы.

секретов

secrets предоставляет доступ к конфиденциальным данным, определенным секретами, для каждой службы. Два поддерживаются различные варианты синтаксиса: короткий синтаксис и длинный синтаксис.

Реализации Compose ДОЛЖНЫ сообщать об ошибке, если секрет не существует на платформе или не определен в секреты раздела этого файла Compose.

Краткий синтаксис

Вариант с коротким синтаксисом указывает только секретное имя. Это дает контейнерный доступ к секрету и монтирует его как доступный только для чтения к /run/secrets/<имя_секрета> внутри контейнера. Имя источника и конечная точка монтирования установлены к секретному имени.

В следующем примере используется краткий синтаксис для предоставления внешнего интерфейса службы . доступ к секретному сертификату сервера . Значение сертификата сервера установлено к содержимому файла ./server. cert .

 услуги:
  внешний интерфейс:
    изображение: круто/веб-приложение
    секреты:
      - сервер-сертификат
секреты:
  сертификат сервера:
    файл: ./server.cert
 
Длинный синтаксис

Длинный синтаксис обеспечивает большую детализацию того, как секрет создается внутри контейнеры службы.

  • источник : Имя секрета, существующее на платформе.
  • цель : имя файла, который будет смонтирован в /run/secrets/ в контейнеры задач службы. По умолчанию источник , если не указано иное.
  • uid и gid : числовой UID или GID, которому принадлежит файл в /run/secrets/ в контейнерах задач службы. Значение по умолчанию — запущенный контейнер USER.
  • режим : Разрешения на монтирование файла в /run/secrets/ в контейнерах задач службы в восьмеричном представлении. Значение по умолчанию — права на чтение для всех (режим 0444 ). Бит записи ДОЛЖЕН игнорироваться, если он установлен. Исполняемый бит МОЖЕТ быть установлен.

В следующем примере для имени секретного файла сертификата сервера задается значение 9.0413 сервер.сертификат внутри контейнера устанавливает режим 0440 (доступно для чтения группой) и устанавливает пользователя и группу к 103 . Значение server-certificate secret предоставляется платформой через поиск и жизненный цикл секрета не управляется напрямую реализацией Compose.

 услуги:
  внешний интерфейс:
    изображение: круто/веб-приложение
    секреты:
      - источник: сертификат сервера
        цель: server.cert
        ИД: "103"
        гид: "103"
        режим: 0440
секреты:
  сертификат сервера:
    внешний: правда
 

Службам МОЖЕТ быть предоставлен доступ к нескольким секретам. Длинный и короткий синтаксис для секретов МОГУТ использоваться в тот же файл Compose. Определение секрета в секретах верхнего уровня НЕ ДОЛЖНО подразумевать предоставление доступа к нему какой-либо службе. Такое разрешение должно быть явным образом указано в спецификации службы как элемент секретной службы.

security_opt

security_opt переопределяет схему маркировки по умолчанию для каждого контейнера.

 безопасность_опт:
  - метка:пользователь:ПОЛЬЗОВАТЕЛЬ
  - метка: роль: РОЛЬ
 

размер_шм

shm_size настраивает размер общей памяти (раздел /dev/shm в Linux), разрешенный сервисным контейнером. Задается как значение байта.

stdin_open

stdin_open настраивает сервисные контейнеры для запуска с выделенным стандартным вводом.

stop_grace_period

stop_grace_period указывает, как долго реализация Compose ДОЛЖНА ждать при попытке остановить контейнер, если она не обрабатывать SIGTERM (или любой сигнал остановки, указанный с помощью stop_signal ), перед отправкой SIGKILL. Указанный как продолжительность.

 stop_grace_period: 1 с
    stop_grace_period: 1 м 30 с
 

Значение по умолчанию — 10 секунд для выхода из контейнера перед отправкой SIGKILL.

стоп_сигнал

stop_signal определяет сигнал, который ДОЛЖНА использоваться реализацией Compose для остановки сервисных контейнеров. Если неустановленные контейнеры останавливаются реализацией Compose, отправляя SIGTERM .

 стоп_сигнал: SIGUSR1
 

storage_opt

storage_opt определяет параметры драйвера хранилища для службы.

 storage_opt:
  размер: '1G'
 

системные файлы

sysctls определяет параметры ядра для установки в контейнере. sysctls может использовать либо массив, либо карту.

 системных файлов:
  net.core.somaxconn: 1024
  net.ipv4.tcp_syncookies: 0
 
 системных файлов:
  - net.core.somaxconn=1024
  - net.ipv4.tcp_syncookies=0
 

Вы можете использовать только те sysctl, пространство имен которых находится в ядре. Докер не поддержка изменения sysctl внутри контейнера, который также изменяет хост-систему. Обзор поддерживаемых sysctl см. в разделе Настройка ядра с пространством имен. параметры (sysctls) во время выполнения.

тмпфс

tmpfs монтирует временную файловую систему внутри контейнера. Может быть одним значением или списком.

 тмпфс: /выполнить
 
 тмпфс:
  - /бежать
  - /тмп
 

телетайп

tty настроить сервисный контейнер для работы с TTY.

пределов

ulimits переопределяет ulimits по умолчанию для контейнера. Либо указывает как один предел как целое число, либо мягкие/жесткие ограничения в качестве отображения.

 пределов:
  нпрок: 65535
  Нет файла:
    мягкий: 20000
    жесткий: 40000
 

пользователь

Пользователь переопределяет пользователя, используемого для запуска процесса контейнера. По умолчанию используется изображение (например, Dockerfile USER ), если не задано, root .

userns_mode

userns_mode задает пространство имен пользователя для службы. Поддерживаемые значения зависят от платформы и МОГУТ зависеть на конфигурации платформы

 userns_mode: "хост"
 

томов

тома определяет пути монтирования узлов или именованные тома, которые ДОЛЖНЫ быть доступны сервисным контейнерам.

Если монтирование является путем к хосту и используется только одной службой, оно МОЖЕТ быть объявлено как часть службы. определение вместо ключа верхнего уровня тома .

Чтобы повторно использовать том в нескольких службах, именованный том ДОЛЖЕН быть объявлен в ключе томов верхнего уровня .

В этом примере показан именованный том ( db-data ), используемый серверной службой , и монтирование привязки, определенное для одной службы

 услуги:
  серверная часть:
    изображение: круто/бэкенд
    тома:
      - тип: том
        источник: БД-данные
        цель: /данные
        объем:
          некопировать: правда
      - тип: связать
        источник: /var/run/postgres/postgres. sock
        цель: /var/run/postgres/postgres.sock
тома:
  БД-данные:
 
Краткий синтаксис

В коротком синтаксисе используется одна строка со значениями, разделенными двоеточием, для указания подключения тома. ( VOLUME:CONTAINER_PATH ) или режим доступа ( VOLUME:CONTAINER_PATH:ACCESS_MODE ).

  • ТОМ : МОЖЕТ быть либо путем к хосту на платформе, на которой размещены контейнеры (привязка монтирования), либо именем тома
  • .
  • CONTAINER_PATH : путь в контейнере, куда смонтирован том
  • РЕЖИМ ДОСТУПА : представляет собой список параметров , , разделенных запятыми, и МОЖЕТ быть установлен на:
    • rw : доступ для чтения и записи (по умолчанию)
    • ro : доступ только для чтения
    • z : параметр SELinux указывает, что содержимое узла монтирования привязки используется несколькими контейнерами
    • Z : параметр SELinux указывает, что содержимое узла монтирования привязки является частным и недоступно для других контейнеров

Примечание : параметр SELinux перемаркировки привязки игнорируется на платформах без SELinux.

Примечание . Относительные пути к узлам ДОЛЖНЫ поддерживаться только реализациями Compose, развертываемыми на локальная среда выполнения контейнера. Это связано с тем, что относительный путь разрешается из родительского файла Compose. каталог, который применим только в локальном случае. Compose Реализации развертываются на нелокальном платформа ДОЛЖНА отклонять файлы Compose, которые используют относительные пути хоста с ошибкой. Во избежание неясностей относительные пути для именованных томов ДОЛЖНЫ всегда начинаться с . или .. .

Длинный синтаксис

Синтаксис длинной формы позволяет настраивать дополнительные поля, которые нельзя выражается в краткой форме.

  • тип : тип крепления том , bind , tmpfs или npipe
  • источник : источник монтирования, путь на хосте для монтирования привязки или имя тома, определенное в ключ верхнего уровня томов . Неприменимо для монтирования tmpfs.
  • цель : путь в контейнере, где смонтирован том
  • read_only : флаг для установки тома только для чтения
  • bind : настроить дополнительные параметры связывания
    • распространение : режим распространения, используемый для привязки
    • create_host_path : создать каталог по исходному пути на хосте, если ничего нет. Ничего не делайте, если на пути что-то есть. Это автоматически подразумевается коротким синтаксисом для обратной совместимости с docker-compose legacy.
    • selinux : вариант перемаркировки SELinux z (общий) или Z (частный)
  • том : настроить дополнительные параметры тома
    • nocopy : флаг для отключения копирования данных из контейнера при создании тома
  • tmpfs : настроить дополнительные параметры tmpfs
    • размер : размер для монтирования tmpfs в байтах (либо в числовом, либо в байтовом формате)
    • режим : режим файла для монтирования tmpfs как биты разрешения Unix в виде восьмеричного числа
  • согласованность : требования согласованности крепления. Доступные значения зависят от платформы

тома_от

volumes_from монтирует все тома из другого сервиса или контейнера, опционально указывая доступ только для чтения (ro) или чтение-запись (rw). Если уровень доступа не указан, то ДОЛЖНЫ использоваться чтение-запись.

Строковое значение определяет другую службу в модели приложения Compose для подключения томов. Контейнер : префикс , если он поддерживается, позволяет монтировать тома из контейнера, который не управляется Составить реализацию.

 томов_от:
  - наименование услуги
  - имя_службы:ro
  - контейнер:имя_контейнера
  - контейнер:имя_контейнера:rw
 

рабочий_каталог

work_dir переопределяет рабочий каталог контейнера, указанный в образе (т. е. Dockerfile РАБОЧИЙ КАТАЛОГ ).

Элемент верхнего уровня сети

Сети — это уровень, который позволяет службам взаимодействовать друг с другом. Сетевая модель, предоставляемая сервису ограничивается простым IP-соединением с целевыми службами и внешними ресурсами, в то время как определение сети позволяет тонкая настройка фактической реализации, предоставляемой платформой.

Сети

можно создать, указав имя сети в разделе верхнего уровня сетей . Сервисы могут подключаться к сетям, указав имя сети под сервисом сетей подраздел

В следующем примере во время выполнения будут созданы сети переднего уровня и заднего уровня , а также служба внешнего интерфейса . подключен к сети переднего уровня и сети заднего уровня .

 услуги:
  внешний интерфейс:
    изображение: круто/веб-приложение
    сети:
      - передний ярус
      - задний ярус
сети:
  передний ряд:
  задний уровень:
 

драйвер

Драйвер указывает, какой драйвер следует использовать для этой сети. Реализации Compose ДОЛЖНЫ возвращать ошибку, если Драйвер недоступен на платформе.

Драйвер
: оверлей
 

Значения по умолчанию и доступные значения зависят от платформы. Спецификация Compose ДОЛЖНА поддерживать следующие конкретные драйверы: нет и хост

  • хост использовать сетевой стек хоста
  • нет отключить сеть
хост или нет

Синтаксис для использования встроенных сетей, таких как host и none отличается, так как такие сети неявно существуют вне область реализации Compose. Для их использования НЕОБХОДИМО определить внешнюю сеть с именем хост или нет и псевдоним, который может использовать реализация Compose ( hostnet или notet в следующих примерах), а затем предоставить службу доступ к этой сети, используя свой псевдоним.

 услуги:
  веб:
    сети:
      хостнет: {}
сети:
  хостнет:
    внешний: правда
    имя: хозяин
 
 услуги:
  веб:
    ...
    сети:
      нонет: {}
сети:
  нонет:
    внешний: правда
    имя: нет
 

driver_opts

driver_opts указывает список параметров в виде пар ключ-значение для передачи драйверу для этой сети. Эти варианты зависит от драйвера — обратитесь к документации драйвера для получения дополнительной информации. По желанию.

 driver_opts:
  фу: "бар"
  баз: 1
 

съемный

Если для attachable установлено значение true , то автономные контейнеры ДОЛЖНЫ иметь возможность подключаться к этой сети в дополнение к службам. Если автономный контейнер подключается к сети, он может взаимодействовать со службами и другими автономными контейнерами. которые также подключены к сети.

 сетей:
  мойнет1:
    драйвер: оверлей
    прикрепляемый: правда
 

enable_ipv6

enable_ipv6 включить сеть IPv6 в этой сети.

IP-адрес

ipam указывает пользовательскую конфигурацию IPAM. Это объект с несколькими свойствами, каждое из которых является необязательным:

  • драйвер : Пользовательский драйвер IPAM вместо стандартного.
  • config : список с нулем или более элементами конфигурации, каждый из которых содержит:
    • подсеть : подсеть в формате CIDR, представляющая сегмент сети
    • .
    • ip_range : Диапазон IP-адресов, из которых можно выделить IP-адреса контейнера
    • шлюз : шлюз IPv4 или IPv6 для главной подсети
    • aux_addresses : Вспомогательные адреса IPv4 или IPv6, используемые сетевым драйвером, как сопоставление имени хоста с IP
  • Параметры : Специфичные для драйвера параметры как сопоставление ключ-значение.

Полный пример:

 IP-адрес:
  драйвер: по умолчанию
  конфигурация:
    - подсеть: 172.28.0.0/16
      ip_range: 172.28.5.0/24
      шлюз: 172.28.5.254
      aux_адреса:
        хост1: 172.28.1.5
        хост2: 172.28.1.6
        хост3: 172.28.1.7
  опции:
    фу: бар
    баз: "0"
 

внутренний

По умолчанию реализации Compose ДОЛЖНЫ обеспечивать внешнее подключение к сетям. внутренний при установке на true разрешить создать внешне изолированную сеть.

этикетки

Добавляйте метаданные в контейнеры с помощью меток. Может использовать либо массив, либо словарь.

Пользователям СЛЕДУЕТ использовать обратную DNS-нотацию, чтобы предотвратить конфликт меток с метками, используемыми другим программным обеспечением.

 этикеток:
  com.example.description: "Сеть финансовых транзакций"
  com.example.department: "Финансы"
  com.example.label-with-empty-value: ""
 
 этикеток:
  - "com. example.description=Сеть финансовых транзакций"
  - "com.example.department=Финансы"
  - "com.example.label-with-empty-value"
 
Реализации

Compose ДОЛЖНЫ устанавливать метки com.docker.compose.project и com.docker.compose.network .

внешний

Если установлено значение true , external указывает, что жизненный цикл этой сети поддерживается за пределами жизненного цикла приложения. Реализации Compose НЕ ДОЛЖНЫ пытаться создавать эти сети и вызывать ошибку, если они не существуют.

Если для external установлено значение true , Compose не управляет ресурсом. Если external имеет значение true и в конфигурации сети установлены другие атрибуты, кроме name , тогда реализации Compose ДОЛЖНЫ отклонить файл Compose как недействительный.

В приведенном ниже примере прокси-сервер является шлюзом во внешний мир. Вместо того, чтобы пытаться создать сеть, Compose реализациям СЛЕДУЕТ запрашивать у платформы существующую сеть с простым названием за пределами и подключать прокси сервисных контейнеров к нему.

Сервисы:
  прокси:
    изображение: круто/прокси
    сети:
      - вне
      - дефолт
  приложение:
    изображение: круто/приложение
    сети:
      - дефолт
сети:
  вне:
    внешний: правда
 

имя

имя устанавливает пользовательское имя для этой сети. Поле имени можно использовать для ссылок на сети, содержащие специальные символы. Имя используется как есть, и , а не , будет ограничено именем проекта.

 сетей:
  сеть1:
    имя: мое-приложение-сеть
 

Его также можно использовать в сочетании со свойством external для определения сети платформы, которую реализует Compose. должен извлекаться, как правило, с использованием параметра, поэтому файлу Compose не нужно жестко кодировать конкретные значения среды выполнения:

 сетей:
  сеть1:
    внешний: правда
    имя: "${NETWORK_ID}"
 

Элемент верхнего уровня Volumes

Тома — это постоянные хранилища данных, реализованные платформой. Спецификация Compose предлагает нейтральную абстракцию. для служб для монтирования томов и параметров конфигурации для их размещения в инфраструктуре.

Раздел Volumes позволяет настраивать именованные тома, которые можно повторно использовать в нескольких службах. Вот пример установки с двумя службами, где каталог данных базы данных используется совместно с другой службой в виде тома с именем db-data для периодического резервного копирования:

 услуги:
  серверная часть:
    изображение: круто/база данных
    тома:
      - БД-данные:/и т.д./данные
  резервное копирование:
    изображение: служба резервного копирования
    тома:
      - БД-данные:/var/lib/резервная копия/данные
тома:
  БД-данные:
 

Запись под ключом томов верхнего уровня может быть пустой, и в этом случае она использует конфигурацию платформы по умолчанию для создание тома. Опционально можно настроить его следующими ключами:

драйвер

Укажите, какой драйвер тома следует использовать для этого тома. Значения по умолчанию и доступные значения зависят от платформы. Если драйвер недоступен, реализация Compose ДОЛЖНА вернуть ошибку и остановить развертывание приложения.

 драйвер: foobar
 

driver_opts

driver_opts указывает список параметров в виде пар ключ-значение для передачи драйверу для этого тома. Эти параметры зависят от драйвера.

 томов:
  пример:
    driver_opts:
      тип: "нфс"
      o: "addr=10.40.0.199,nolock,soft,rw"
      устройство: ":/докер/пример"
 

внешний

Если установлено значение true , external указывает, что этот том уже существует на платформе и его жизненный цикл управляется извне. того приложения. Реализации Compose НЕ ДОЛЖНЫ пытаться создать эти тома и ДОЛЖНЫ возвращать ошибку, если они не существует.

Если для external установлено значение true , Compose не управляет ресурсом. Если для external задано значение true , а в конфигурации сети установлены другие атрибуты, кроме name , то реализации Compose ДОЛЖНЫ отклонить файл Compose как недействительный.

В приведенном ниже примере вместо попытки создать том с именем {project_name}_db-data , Compose просто ищет существующий том называется БД-данные и монтирует его в контейнеры серверной службы .

 услуги:
  серверная часть:
    изображение: круто/база данных
    тома:
      - БД-данные:/и т.д./данные
тома:
  БД-данные:
    внешний: правда
 

этикетки

метки используются для добавления метаданных к томам. Вы можете использовать либо массив, либо словарь.

Рекомендуется использовать обратную DNS-нотацию, чтобы ваши метки не конфликтующие с теми, которые используются другим программным обеспечением.

 этикетки:
  com.example.description: "Том базы данных"
  com.example.department: "ИТ/эксплуатация"
  com.example.label-with-empty-value: ""
 
 этикеток:
  - "com.example.description=Объем базы данных"
  - "com.example.department=IT/Ops"
  - "com.example.label-with-empty-value"
 

Реализация Compose ДОЛЖНА устанавливать метки com. docker.compose.project и com.docker.compose.volume .

имя

имя установить пользовательское имя для этого тома. Поле имени можно использовать для ссылки на тома, содержащие специальные персонажи. Имя используется как есть и будет , а не , должны ограничиваться именем стека.

 томов:
  данные:
    имя: "данные моего приложения"
 

Его также можно использовать вместе с внешним свойством . При этом имя тома, используемого для поиска фактический объем на платформе задается отдельно от имени, используемого для ссылки на него в файле Compose:

 томов:
  БД-данные:
    внешний:
      имя: фактическое имя тома
 

Это позволяет сделать это имя поиска параметром файла Compose, чтобы идентификатор модели для тома жестко запрограммирован, но фактический идентификатор тома на платформе устанавливается во время выполнения во время развертывания:

 томов:
  БД-данные:
    внешний:
      имя: ${DATABASE_VOLUME}
 

Элемент верхнего уровня конфигурации

Конфигурации

позволяют службам адаптировать свое поведение без необходимости перестраивать образ Docker. Конфигурации сопоставимы с томами с точки зрения службы, поскольку они монтируются в файловую систему контейнеров службы. Фактическая деталь реализации для получения конфигурации, предоставляемой платформой, может быть установлена ​​в определении конфигурации.

При предоставлении доступа к конфигурации содержимое конфигурации монтируется в виде файла в контейнере. Расположение точки монтирования внутри контейнера по умолчанию равно 9.0413 / в контейнерах Linux и C:\ в контейнерах Windows.

По умолчанию конфигурация ДОЛЖНА принадлежать пользователю, запускающему команду контейнера, но может быть переопределена конфигурацией службы. По умолчанию конфигурация ДОЛЖНА иметь права на чтение для всех (режим 0444), если служба не настроена для переопределения этого.

Службы могут получить доступ к конфигурациям только в том случае, если они явно предоставлены подразделом configs .

Высший уровень configs объявление определяет или ссылается данные конфигурации, которые могут быть предоставлены службам в этом заявление. Источником конфигурации является либо файл , либо внешний .

  • файл : Конфиг создается с содержимым файла по указанному пути.
  • external : если установлено значение true, указывает, что эта конфигурация уже создана. Реализация Compose не попытаться создать его, и если он не существует, возникает ошибка.
  • имя : имя объекта конфигурации на платформе для поиска. Это поле можно использовать для ссылки на конфиги, содержащие специальные символы. Имя используется как есть и будет ли , а не охватывать имя проекта.

В этом примере создается http_config (как _http_config ) при развертывании приложения, и my_second_config ДОЛЖНЫ уже существовать на платформе, и значение будет получено путем поиска.

В этом примере server-http_config создается как _http_config при развертывании приложения, путем регистрации содержимого httpd. conf в качестве данных конфигурации.

 конфигов:
  http_config:
    файл: ./httpd.conf
 

В качестве альтернативы http_config можно объявить внешним, при этом реализация Compose будет искать http_config , чтобы предоставить данные конфигурации соответствующим службам.

 конфигов:
  http_config:
    внешний: правда
 

Внешний поиск конфигураций также может использовать отдельный ключ, указав имя . Следующее Пример изменяет предыдущий для поиска конфигурации с использованием параметра HTTP_CONFIG_KEY . Делает поэтому фактический ключ поиска будет установлен во время развертывания путем интерполяции переменные, но отображаются в контейнерах как жестко запрограммированный идентификатор http_config .

 конфигов:
  http_config:
    внешний: правда
    имя: "${HTTP_CONFIG_KEY}"
 

Если для external установлено значение true , Compose не управляет ресурсом. Если для external задано значение true , а в конфигурации сети установлены другие атрибуты, кроме name , то реализации Compose ДОЛЖНЫ отклонить файл Compose как недействительный.

Для создания файла необходимо явно предоставить доступ к конфигурациям соответствующим службам в приложении.

Секреты элемента верхнего уровня

Секреты

— это разновидность конфигураций, ориентированных на конфиденциальные данные, с особыми ограничениями для этого использования. Поскольку реализация платформы может существенно отличаться от Конфигов, специальный раздел Секреты позволяет настраивать связанные ресурсы.

Объявление верхнего уровня secrets определяет или ссылается на конфиденциальные данные, которые могут быть предоставлены службам в этом заявление. Источником секрета является либо файл , либо внешний .

  • файл : секрет создается с содержимым файла по указанному пути.
  • среда : Секрет создается со значением переменной среды.
  • внешний : если установлено значение true, указывает, что этот секрет уже создан. Реализация Compose делает не пытаться его создать, а если он не существует, возникает ошибка.
  • name : Имя секретного объекта в Docker. Это поле можно использовать для ссылочные секреты, содержащие специальные символы. Имя используется как есть и будет ли , а не охватывать имя проекта.

В этом примере сертификат сервера секрет создается как _server-certificate при развертывании приложения, путем регистрации содержимого server.cert в качестве секрета платформы.

 секреты:
  сертификат сервера:
    файл: ./server.cert
 

В этом примере токен секрет создается как _token при развертывании приложения, путем регистрации содержимого переменной среды OAUTH_TOKEN в качестве секрета платформы.

 секретов:
  токен:
    среда: "OAUTH_TOKEN"
 

В качестве альтернативы, сертификат сервера может быть объявлен как внешний, при этом реализация Compose будет искать сертификат сервера , чтобы раскрыть секрет соответствующим службам.

 секретов:
  сертификат сервера:
    внешний: правда
 

Поиск внешних секретов также может использовать отдельный ключ, указав имя . Следующее Пример изменяет предыдущий для поиска секрета с использованием параметра CERTIFICATE_KEY . Делает поэтому фактический ключ поиска будет установлен во время развертывания путем интерполяции переменные, но отображаются в контейнерах как жестко запрограммированный идентификатор сервера сертификата сервера .

 секретов:
  сертификат сервера:
    внешний: правда
    имя: "${CERTIFICATE_KEY}"
 

Если для external установлено значение true , Compose не управляет ресурсом. Если для external задано значение true , а в конфигурации сети установлены другие атрибуты, кроме name , то реализации Compose ДОЛЖНЫ отклонить файл Compose как недействительный. Для создания файла необходимо явно предоставить доступ к секретам соответствующим службам в приложении.

Фрагменты

Можно повторно использовать фрагменты конфигурации с помощью привязок YAML.

 томов:
  БД-данные: &объем по умолчанию
    драйвер: по умолчанию
  метрики: *объем по умолчанию
 

В предыдущем примере якорь создается как том по умолчанию на основе спецификации тома db-data . Позже он повторно используется псевдонимом *default-volume для определения объема метрик . Та же логика может применяться к любому элементу в файле Compose. Якорное разрешение ДОЛЖНО иметь место перед интерполяцией переменных, поэтому переменные нельзя использовать для установки якорей или псевдонимов.

Также можно частично переопределить значения, заданные ссылкой привязки, с помощью Тип слияния YAML. В следующем примере метрик спецификация тома использует псевдоним чтобы избежать повторения, но переопределить имя атрибут:

Сервисы:
  серверная часть:
    изображение: круто/база данных
    тома:
      - БД-данные
      - метрики
тома:
  БД-данные: &объем по умолчанию
    драйвер: по умолчанию
    имя: "данные"
  показатели:
    <<: * объем по умолчанию
    название: "метрики"
 

Расширение

Специальные поля расширения могут иметь любой формат, если их имя начинается с последовательности символов x-. Их можно использовать внутри любой структуры в файле Compose. Это единственное исключение для реализаций Compose, которые молча игнорируют нераспознанные поля.

 х-пользовательский:
  фу:
    - бар
    - зот
Сервисы:
  веб-приложение:
    изображение: круто/веб-приложение
    х-фу: бар
 

Содержимое таких полей не указано в спецификации Compose и может использоваться для включения пользовательских функций. Реализация компоновки для обнаружения неизвестного поля расширения НЕ ДОЛЖНА завершаться ошибкой, но МОЖЕТ предупреждать о неизвестном поле.

Для расширений платформы настоятельно рекомендуется использовать префикс расширения по имени платформы/поставщика, так же, как браузеры добавляют поддержка пользовательских функций CSS.

 служба:
  серверная часть:
    развертывать:
      размещение:
        x-aws-role: "arn:aws:iam::XXXXXXXXXXXX:role/foo"
        x-aws-регион: "eu-west-3"
        x-azure-region: "центральная Франция"
 

Информативные исторические заметки

Этот раздел носит информативный характер. На момент написания были известны следующие префиксы:

префикс поставщик/организация
докер Докер
кубернет Кубернетес

Использование расширений в качестве фрагментов

Благодаря поддержке полей расширения файл Compose можно записать следующим образом, чтобы улучшить читаемость повторно используемых фрагментов:

 x-регистрация: & регистрация по умолчанию
  опции:
    максимальный размер: "12м"
    max-файл: "5"
  драйвер: json-файл
Сервисы:
  внешний интерфейс:
    изображение: круто/веб-приложение
    ведение журнала: * ведение журнала по умолчанию
  серверная часть:
    изображение: круто/база данных
    ведение журнала: * ведение журнала по умолчанию
 

указание значений байтов

Значение выражает значение байта в виде строки в формате {количество} {байтовая единица} : Поддерживаемые единицы: b (байты), k или kb (килобайты), m или mb (мегабайты) и g или gb (гигабайты).

 2б
    1024кб
    2048k
    300м
    1 ГБ
 

указание длительности

Значение, выражающее продолжительность в виде строки в формате {значение}{единица измерения} . Поддерживаемые единицы: us (микросекунды), ms (миллисекунды), s (секунды), m (минуты) и h (часы). Значение может объединять несколько значений и использоваться без разделителя.

 10 мс
  40-е годы
  1м30с
  1ч5м30с20мс
 

Интерполяция

Значения в файле Compose могут быть заданы переменными и интерполированы во время выполнения. Составные файлы используют Bash-подобный синтаксис ${ПЕРЕМНАЯ}

Поддерживаются синтаксис $VARIABLE и ${VARIABLE} . Значения по умолчанию могут быть определены встроенными с использованием типичного синтаксиса оболочки: последний

  • ${ПЕРЕМЕННАЯ:-по умолчанию} оценивается как по умолчанию , если ПЕРЕМЕННАЯ не установлена ​​или пусто в окружающей среде.
  • ${ПЕРЕМНАЯ-по умолчанию} оценивается как по умолчанию , только если ПЕРЕМЕННАЯ не установлена в окружающей среде.

Аналогично, следующий синтаксис позволяет указывать обязательные переменные:

  • ${VARIABLE:?err} завершает работу с сообщением об ошибке, содержащим err , если ПЕРЕМЕННАЯ не задана или пуста в среде.
  • ${VARIABLE?err} завершается с сообщением об ошибке, содержащим err , если ПЕРЕМЕННАЯ не задана в среде.

Интерполяция также может быть вложенной:

  • ${ПЕРЕМНАЯ:-${FOO}}
  • ${ПЕРЕМНАЯ?$FOO}
  • ${ПЕРЕМЕННАЯ:-${FOO:-по умолчанию}}

Другие расширенные функции оболочки, такие как ${VARIABLE/foo/bar} , не поддерживается спецификацией Compose.

Вы можете использовать $$ (знак двойного доллара), когда ваша конфигурация требует буквального знак доллара.

admin

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

2024 © Все права защищены.