Что такое код hw_api_object >title

Содержание

Что такое API? Простое объяснение для начинающих

Этот краткий термин на слуху у всех, кто хоть как-то сталкивался с разработкой. Но далеко не все понимают, что именно он обозначает и зачем нужен. Разработчик Пётр Газаров рассказал об API простыми словами в своём блоге.

Аббревиатура API расшифровывается как «Application Programming Interface» (интерфейс программирования приложений, программный интерфейс приложения). Большинство крупных компаний на определённом этапе разрабатывают API для клиентов или для внутреннего использования. Чтобы понять, как и каким образом API применяется в разработке и бизнесе, сначала нужно разобраться, как устроена «всемирная паутина».

Всемирная паутина и удалённые серверы

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

При введении в адресную строку браузера www.facebook.com на удалённый сервер Facebook отправляется соответствующий запрос. Как только браузер получает ответ, то интерпретирует код и отображает страницу.

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

API как способ обслуживания клиентов

Многие компании предлагают API как готовый продукт. Например, Weather Underground продаёт доступ к своему API для получения метеорологических данных.

Сценарий использования: на сайте небольшой компании есть форма для записи клиентов на приём. Компания хочет встроить в него Google Календарь, чтобы дать клиентам возможность автоматически создавать событие и вносить детали о предстоящей встрече.

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

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

Чем API Google Календаря отличается от API любого другого удалённого сервера в сети?

Технически, разница в формате запроса и ответа. Чтобы сгенерировать полную веб-страницу, браузер ожидает ответ на языке разметки HTML, в то время как API Google Календаря вернёт просто данные в формате вроде JSON.

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

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

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

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

Таким образом, когда компания предлагает своим пользователям API, это просто означает, что она создала ряд специальных URL, которые в качестве ответа возвращают только данные.

Такие запросы часто можно отправлять через браузер. Так как передача данных по протоколу HTTP происходит в текстовом виде, браузер всегда сможет отобразить ответ. Например, через браузер можно напрямую обратиться к API GitHub (https://api.github.com/users/petrgazarov), причём без маркера доступа, и получить вот такой ответ в формате JSON:

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

Ещё несколько примеров API

Слово «application» (прикладной, приложение) может применяться в разных значениях. В контексте API оно подразумевает:

  • фрагмент программного обеспечения с определённой функцией,
  • сервер целиком, приложение целиком или же просто отдельную часть приложения.

Любой фрагмент ПО, который можно чётко выделить из окружения, может заменять букву «А» в англоязычной аббревиатуре, и тоже может иметь некоторого рода API. Например, при внедрении в код разработчиком сторонней библиотеки, она становится частью всего приложения. Будучи самостоятельным фрагментом ПО, библиотека будет иметь некий API, который позволит ей взаимодействовать с остальным кодом приложения.

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

amp-bind

Adds custom interactivity with data binding and expressions.

Required Script
Examples
  • Introductory code example with annotations
  • Linked image carousels example with annotations
  • E-commerce product page example with annotations
Tutorials Create interactive AMP pages

Overview

The amp-bind component allows you to add custom stateful interactivity to your AMP pages via data binding and JS-like expressions.

A simple example

In the following example, tapping the button changes the

element’s text from «Hello World» to «Hello amp-bind».

For performance and to avoid the risk of unexpected content jumping, amp-bind does not evaluate expressions on page load. This means that the visual elements should be given a default state and not rely amp-bind for initial render.

How does it work?

amp-bind has three main components:

  1. State: A document-scope, mutable JSON state. In the example above, the state is empty before tapping the button. After tapping the button, the state is .
  2. Expressions: These are JavaScript-like expressions that can reference the state. The example above has a single expression, ‘Hello ‘ + foo , which concatenates the string literal ‘Hello ‘ and the state variable foo . There is a limit of 100 operands what can be used in an expression.
  3. Bindings: These are special attributes of the form [property] that link an element’s property to an expression. The example above has a single binding, [text] , which updates the

element’s text every time the expression’s value changes.

amp-bind takes special care to ensure speed, security and performance on AMP pages.

A slightly more complex example

When the button is pressed:

State is updated with currentAnimal defined as ‘cat’ .

Expressions that depend on currentAnimal are evaluated:

  • ‘This is a ‘ + currentAnimal + ‘.’ => ‘This is a cat.’
  • myAnimals[currentAnimal].style => ‘redBackground’
  • myAnimals[currentAnimal].imageUrl => /img/cat.jpg

Bindings that depend on the changed expressions are updated:

element’s text will read «This is a cat.»
The second

element’s class attribute will be «redBackground».

  • The amp-img element will show the image of a cat.
  • Try out the live demo for this example with code annotations!

    Details

    State

    Each AMP document that uses amp-bind has document-scope mutable JSON data, or state.

    Initializing state with amp-state

    amp-bind ‘s state can be initialized with the amp-state component:

    Expressions can reference state variables via dot syntax. In this example, myState.foo will evaluate to «bar» .

    Refreshing state

    The refresh action is supported by this component and can be used to refresh the state’s contents.

    Updating state with AMP.setState()

    The AMP.setState() action merges an object literal into the state. For example, when the below button is pressed, AMP.setState() will deep-merge the object literal with the state.

    In general, nested objects will be merged up to a maximum depth of 10. All variables, including those introduced by amp-state , can be overidden.

    When triggered by certain events, AMP.setState() also can access event-related data on the event property.

    Modifying history with AMP.pushState()

    The AMP.pushState() action is similar to AMP.setState() except it also pushes a new entry onto the browser history stack. Popping this history entry (e.g. by navigating back) restores the previous value of variables set by AMP.pushState() .

    • Tapping the button will set variable foo to 123 and push a new history entry.
    • Navigating back will restore foo to its previous value, «bar» (equivalent to calling AMP.setState() .

    Expressions

    Expressions are similar to JavaScript with some important differences.

    Differences from JavaScript

    • Expressions may only access the containing document’s state.
    • Expressions do not have access to window or document . global references the top-level state.
    • Only white-listed functions and operators may be used. Custom functions, classes and loops are disallowed. Arrow functions are allowed as function parameters e.g. [1, 2, 3].map(x => x + 1) .
    • Undefined variables and array-index-out-of-bounds return null instead of undefined or throwing errors.
    • A single expression is currently capped at 50 operands for performance. Please contact us if this is insufficient for your use case.

    The full expression grammar and implementation can be found in bind-expr-impl.jison and bind-expression.js.

    Examples

    The following are all valid expressions:

    White-listed functions

    Object type Function(s) Example
    Array 1 concat
    filter
    includes
    indexOf
    join
    lastIndexOf
    map
    reduce
    slice
    some
    sort (not-in-place)
    splice (not-in-place)
    Number toExponential
    toFixed
    toPrecision
    toString
    String charAt
    charCodeAt
    concat
    indexOf
    lastIndexOf
    replace
    slice
    split
    substr
    substring
    toLowerCase
    toUpperCase
    Math 2 abs
    ceil
    floor
    max
    min
    pow
    random
    round
    sign
    Object 2 keys
    values
    Global 2 encodeURI
    encodeURIComponent

    1 Single-parameter arrow functions can’t have parentheses, e.g. use x => x + 1 instead of (x) => x + 1 . Also, sort() and splice() return modified copies instead of operating in-place.
    2 Static functions are not namespaced, e.g. use abs(-1) instead of Math.abs(-1) .

    Defining macros with amp-bind-macro

    amp-bind expression fragments can be reused by defining an amp-bind-macro . The amp-bind-macro element allows you to define an expression that takes zero or more arguments and references the current state. A macro can be invoked like a function by referencing its id attribute value from anywhere in your doc.

    A macro can also call other macros defined before itself. A macro cannot call itself recursively.

    Bindings

    A binding is a special attribute of the form [property] that links an element’s property to an expression. An alternative, XML-compatible syntax can also be used in the form of data-amp-bind-property .

    When the state changes, expressions are re-evaluated and the bound elements’ properties are updated with the new expression results.

    amp-bind supports data bindings on five types of element state:

    Type Attribute(s) Details
    Node.textContent [text] Supported on most text elements.
    CSS classes [class] Expression result must be a space-delimited string.
    The hidden attribute [hidden] Should be a boolean expression.
    Size of AMP elements [width]
    [height]
    Changes the width and/or height of the AMP element.
    Accessibility states and properties [aria-hidden]
    [aria-label]
    etc.
    Used for dynamically updating information available to assistive technologies like screen readers.
    Element-specific attributes Various

    Notes on bindings:

    Element-specific attributes

    Only binding to the following components and attributes are allowed:

    Component Attribute(s) Behavior
    [data-account]
    [data-embed]
    [data-player]
    [data-player-id]
    [data-playlist-id]
    [data-video-id]
    Changes the displayed Brightcove video.
    [slide] Changes the currently displayed slide index. See an example.
    [min]
    [max]
    Sets the earliest selectable date
    Sets the latest selectable date
    [src]
    [title]
    Displays the document at the updated URL.
    Changes the document’s title.
    [src] Changes the iframe’s source URL.
    [alt]
    [attribution]
    [src]
    [srcset]
    Recommend binding to [srcset] instead of [src] to support responsive images.
    See corresponding amp-img attributes.
    [open] Toggles display of the lightbox. Tip: Use on=»lightboxClose: AMP.setState(. )» to update variables when the lightbox is closed.
    [src] If expression is a string, fetches and renders JSON from the string URL. If expression is an object or array, renders the expression data.
    [selected] *
    [disabled]
    Changes the currently selected children element(s)
    identified by their option attribute values. Supports a comma-separated list of values for multiple selection. See an example.
    [src] Fetches JSON from the new URL and merges it into the existing state. Note the following update will ignore elements to prevent cycles.
    [data-tweetid] Changes the displayed Tweet.
    [alt]
    [attribution]
    [controls]
    [loop]
    [poster]
    [preload]
    [src]
    See corresponding amp-video attributes.
    [data-videoid] Changes the displayed YouTube video.
    [href] Changes the link.
    [disabled]
    [type]
    [value]
    See corresponding button attributes.
    [open] See corresponding details attributes.
    [disabled] Enables or disables the fieldset.
    [xlink:href] See corresponding image attributes.
    [accept]
    [accessKey]
    [autocomplete]
    [checked]
    [disabled]
    [height]
    [inputmode]
    [max]
    [maxlength]
    [min]
    [minlength]
    [multiple]
    [pattern]
    [placeholder]
    [readonly]
    [required]
    [selectiondirection]
    [size]
    [spellcheck]
    [step]
    [type]
    [value]
    [width]
    See corresponding input attributes.
    [disabled]
    [label]
    [selected]
    [value]
    See corresponding option attributes.
    [disabled]
    [label]
    See corresponding optgroup attributes
    [data-expand] Changes the expansion of a section in an amp-accordion.
    [autofocus]
    [disabled]
    [multiple]
    [required]
    [size]
    See corresponding select attributes.
    [src]
    [type]
    See corresponding source attributes.
    [label]
    [src]
    [srclang]
    See corresponding track attributes.
    [autocomplete]
    [autofocus]
    [cols]
    [disabled]
    [defaultText]
    [maxlength]
    [minlength]
    [placeholder]
    [readonly]
    [required]
    [rows]
    [selectiondirection]
    [selectionend]
    [selectionstart]
    [spellcheck]
    [wrap]
    Use [defaultText] to update initial text, and [text] to update current text.
    See corresponding textarea attributes.

    * Denotes bindable attributes that don’t have a non-bindable counterpart.

    Debugging

    Test in development mode (with the URL fragment #development=1 ) to highlight warnings and errors during development and to access special debugging functions.

    Warnings

    In development mode, amp-bind will issue a warning when the default value of a bound attribute doesn’t match its corresponding expression’s initial result. This can help prevent unintended mutations caused by changes in other state variables. For example:

    In development mode, amp-bind will also issue a warning when dereferencing undefined variables or properties. This can also help prevent unintended mutations due to null expression results. For example:

    Errors

    There are several types of runtime errors that may be encountered when working with amp-bind .

    Type Message Suggestion
    Invalid binding Binding to [foo] on

    is not allowed.

    Use only white-listed bindings.
    Syntax error Expression compilation error in. Verify the expression for typos.
    Non-whitelisted functions alert is not a supported function. Use only white-listed functions.
    Sanitized result «javascript:alert(1)» is not a valid result for [href]. Avoid banned URL protocols or expressions that would fail the AMP Validator.
    CSP violation Refused to create a worker from ‘blob. ‘ because it violates the following Content Security Policy directive. Add default-src blob: to your origin’s Content Security Policy. amp-bind delegates expensive work to a dedicated Web Worker to ensure good performance.

    Debugging State

    Use AMP.printState() to print the current state to the console.

    Appendix

    specification

    An amp-state element may contain either a child

    We use cookies to understand how you use our site and to improve your experience. By continuing to use our site, you accept our use of cookies and privacy policy.

    Операции с объектами

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

    DELETE Object

    Эта реализация операции DELETE удаляет объект, указанный в запросе.

    Запросы

    Синтаксис запросов

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

    Эта реализация операции не использует параметры запроса.

    Элементы запроса

    Эта реализация операции не использует элементы запроса.

    Пример

    Данный запрос удаляет объект «objectname».

    Запрос

    Ответ

    GET Object

    Описание

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

    У контейнера Cloud Storage нет иерархии каталогов, как в стандартной файловой системе компьютера. Тем не менее, вы можете создать логическую иерархию, используя имена ключей объектов, которые подразумевают структуру папок. Например, вы можете назвать объект не sample.jpg , а photos/2006/February/sample.jpg .

    Чтобы извлечь объект с такой логической иерархией, укажите в операции GET полное имя объекта.

    Если у вас есть объект с именем photos/2006/February/sample.jpg , вы можете в зависимости от стиля запроса указать ресурс как /photos/2006/February/sample.jpg или как /examplebucket/photos/2006/February/sample.jpg , где examplebucket — имя вашего контейнера.

    Запросы

    Синтаксис запросов

    Заголовки запроса

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

    Загружает байты объекта в указанном диапазоне. Подробнее о заголовке HTTP Range: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35 .

    • Тип: String
    • По умолчанию: отсутствует
    • Ограничения: отсутствует
    Имя Описание Обязательно
    Range Нет

    Элементы запроса

    Эта реализация операции не использует элементы запроса.

    Ответы

    Элементы ответа

    Эта реализация операции не возвращает элементы ответа.

    Примеры

    Пример 1

    Этот запрос возвращает объект file1.bin.

    Запрос

    Ответ

    Пример 2

    В следующем запросе задается заголовок Range, чтобы получить первые 10 байт объекта. Больше информации о заголовке Range читайте по ссылке: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html. Cloud Storage не поддерживает получение нескольких диапазонов данных для запроса GET.

    Запрос

    Ответ

    GET Object ACL

    Описание

    Эта реализация операции GET использует субресурс «acl» для возврата списка управления доступом (ACL) объекта. Чтобы использовать эту операцию, вы должны иметь право READ_ACP на объекте.

    Запросы

    Синтаксис

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

    Эта реализация операции не использует параметры запроса.

    Элементы запроса

    Эта реализация операции не использует элементы запроса.

    Ответы

    Элементы ответа

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

    • Тип: Container
    • Родительские объекты: AccessControlPolicy

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

    • Тип: Container
    • Родительские объекты: отсутствует

    Домен проекта Cloud Storage (например, first.bizml.ru).

    • Тип: String
    • Родительские объекты: AccessControlPolicy.Owner

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

    • Тип: Container
    • Родительские объекты: AccessControlPolicy.AccessControlList

    Информация о группе (URI) или о проекте (домен и идентификатор).

    • Тип: String
    • Родительские объекты: AccessControlPolicy.AccessControlList.Grant

    Идентификатор владельца контейнера или идентификатор получателя.

    • Тип: String
    • Родительские объекты: AccessControlPolicy.Owner или AccessControlPolicy.AccessControlList.Grant

    Блок, содержащий информацию о проекте, владеющим объектом. (Информация включает домен и идентификатор проекта ).

    • Тип: Container
    • Родительские объекты: AccessControlPolic

    Указывает право предоставленное проекту или глобальной группе (FULL_CONTROL, READ, WRITE, READ_ACP, WRITE_ACP).

    • Тип: String
    • Родительские объекты: AccessControlPolicy.AccessControlList.Gran
    Имя Описание
    AccessControlList
    AccessControlPolicy
    DisplayName
    Grant
    Grantee
    ID
    Owner
    Permission

    Пример

    Данный запрос возвращает информацию о правах установленных на объекте my-image.jpg.

    Запрос

    Ответ

    PUT Object

    Описание

    Эта реализация операции PUT добавляет объект в контейнер. У вас должны быть установлено право WRITE на контейнер, чтобы добавить в него объект.

    Сервис никогда не добавляет объекты частично. Если вы получили ответ об успешном выполнении, значит сервис добавил в контейнер объект целиком.

    Сервис — распределенная система. Если сервис одновременно получает несколько запросов на запись для одного и того же объекта, он перезаписывает все, кроме последнего записанного объекта.

    Чтобы предотвратить повреждение данных при прохождении сети, используйте заголовок Content-MD5. Когда вы используете этот заголовок, сервис сверяет объект с предоставленным значением MD5 и в случае несовпадения возвращает ошибку. Кроме того, вы можете вычислить MD5, помещая объект в хранилище, и сравнить возвращаемый ETag с вычисленным значением MD5.

    Чтобы настроить приложение для отправки заголовков запросов до отправки текста запроса, используйте код состояния HTTP 100-continue. Для операций PUT это помогает избежать отправки текста сообщения, если сообщение отклонено из-за заголовков (например, из-за сбоя аутентификации или перенаправления). Подробнее о коде состояния HTTP 100-continue см. в разделе 8.2.3: http://www.ietf.org/rfc/rfc2616.txt .

    Права доступа

    При загрузке объекта вы можете дополнительно указать учетные записи или глобальные группы, которым должны быть предоставлены права доступа для вашего объекта. Существует два способа предоставления прав, используя заголовки запросов:

    • Укажите связанный ACL, используя заголовок запроса x-amz-acl.
    • Укажите права доступа явным образом с помощью заголовков x-amz-grant-read, x-amz-grant-read-acp, and x-amz-grant-write-acp, x-amz-grant-full-control. Эти заголовки сопоставляются с набором разрешений, поддерживаемых сервисом в ACL.

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

    Если эти заголовки используются для изменения прав доступа к объекту то запрашивающая сторона должна обладать правом WRITE_ACP.

    Запросы

    Синтаксис

    Синтаксис показывает некоторые заголовки запросов. Полный список см. в разделе «Заголовки запросов».

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

    Эта реализация операции не использует параметры запроса.

    Заголовки запроса

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

    • Тип: String
    • По умолчанию: отсутствует
    • Ограничения: отсутствует

    128-битный MD5-хэш сообщения (без заголовков) в кодировке Base64 в соответствии с RFC 1864. Этот заголовок может использоваться для проверки целостности сообщения, чтобы убедиться, что данные те же, что были отправлены первоначально. Хотя это необязательно, мы рекомендуем использовать механизм Content-MD5 в качестве сквозной проверки целостности.

    • Тип: String
    • По умолчанию: отсутствует
    • Ограничения: отсутствует
    • Тип: String
    • По умолчанию: binary/octet-stream
    • Допустимые значения: Типы MIME
    • Ограничения: отсутствует

    Когда ваше приложение использует 100-continue, оно не отправляет текст запроса, пока не получит подтверждение. Если сообщение отклонено из-за заголовков, текст сообщения не отправляется.

    • Тип: String
    • По умолчанию: отсутствует
    • Допустимые значения: 100-continue
    • Ограничения: отсутствует

    Может использоваться для указания поведения кеширования по отношению к цепочке запросов/ответов. Для получения дополнительной информации смотрите http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.

    • Тип: String
    • По умолчанию: нет значения
    • Ограничения: отсутствует

    Указывает представляемую информацию для объекта. Для получения дополнительной информации смотрите http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1.

    • Тип: String
    • По умолчанию: нет значения
    • Ограничения: отсутствует

    Указывает на используемые кодировки содержимого на объекте и, следовательно, на то, какие механизмы декодирования должны быть использованы для получения типа содержимого media-type, на который ссылается поле заголовка Content-Type. Для получения дополнительной информации смотрите http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11.

    • Тип: String
    • По умолчанию: нет значения
    • Ограничения: отсутствует

    Дата и время окончания возможности кеширования объекта. Для получения дополнительной информации смотрите http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21.

    • Тип: String
    • По умолчанию: нет значения
    • Ограничения: отсутствует
    Имя Описание Обязательно
    Content-Length Да
    Content-MD5 Нет
    Content-Type Нет
    Expect Нет
    Cache-Control Нет
    Content-Disposition Нет
    Content-Encoding Нет
    Expires Нет

    Заголовки запросов списка контроля доступа (ACL)

    С этой операцией вы можете дополнительно использовать следующие заголовки, связанные с управлением доступом. По умолчанию все объекты являются частными: только владелец имеет полный доступ. При добавлении нового объекта вы можете предоставлять разрешения отдельным учетным записям Cloud Storage или предопределенным группам. Эти разрешения затем используются для создания списка контроля доступа (ACL) для объекта.

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

    1. Указание связанного ACL. Сервис поддерживает набор связанного ACL. Каждый связанный ACL имеет предопределенный набор получателей и разрешений.

    Предопределенный ACL, применяемый к объекту.

    • Тип: String
    • По умолчанию: private
    • Допустимые значения: private | public-read | public-read-write | authenticated-read | bucket-owner-read | bucket-owner-full-control
    • Ограничения: отсутствует
    Имя Описание Обязательно
    x-amz-acl Нет

    2. Явное указание прав доступа. Если вы хотите явно предоставить разрешения доступа определенным проектам Cloud Storage , используйте следующие заголовки. Каждый из следующих заголовков сопоставляется с определенными правами, которые сервис поддерживает в ACL. В значении заголовка вы указываете список получателей конкретного права.

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

    • Тип: String
    • По умолчанию: отсутствует
    • Ограничения: отсутствует

    Не применяется для объекта.

    • Тип: String
    • По умолчанию: отсутствует
    • Ограничения: отсутствует

    П озволяет получателю читать права, установленные на объекте .

    • Тип: String
    • По умолчанию: отсутствует
    • Ограничения: отсутствует

    Позволяет получателю устанавливать права на объект.

    • Тип: String
    • По умолчанию: отсутствует
    • Ограничения: отсутствует

    Предоставляет получателю права READ, READ_ACP и WRITE_ACP для объекта.

    • Тип: String
    • По умолчанию: отсутствует
    • Ограничения: отсутствует
    Имя Описание Обязательно
    x-amz-grant-read Нет
    x-amz-grant-write Нет
    x-amz-grant-read-acp Нет
    x-amz-grant-write-acp Нет
    x-amz-grant-full-control Нет

    Вы указываете каждого получателя в виде пары тип = значение, где тип может быть одним из следующих:

    • emailAddress — если указанное значение является адресом электронной почты проекта Cloud Storage (домен для нас).
    • id — если указанное значение является каноническим идентификатором пользователя проекта Cloud Storage
    • uri — при предоставлении прав предопределенной группе

    Например, следующий заголовок x-amz-grant-read предоставляет право на чтение данных и метаданных объекта для проекта Cloud Storage, идентифицированных по адресам электронной почты.

    Ответы

    Элементы ответа

    Эта реализация операции не возвращает элементы ответа.

    Примеры

    Пример 1

    Следующий запрос создает объект «file1.bin».

    Запрос

    Ответ

    Пример 2

    Запрос, использующий связанный acl для установки прав. Данный запрос сохраняет файл TestObject.txt в контейнере myBucket. Запрос использует заголовок x-amz-acl для установки связанного Acl, устанавливающего право READ для всех.

    Запрос

    Ответ

    PUT Object — Copy

    Описание

    Эта реализация операции PUT создает копию объекта, который уже хранится в сервисе. Операция копирования PUT идентична последовательному выполнению GET и PUT. Добавление заголовка запроса, x-amz-copy-source, приводит к тому, что операция PUT копирует исходный объект в целевой контейнер.

    При копировании объекта вы можете сохранить большую часть метаданных (по умолчанию) или указать новые метаданные. (Для записи новых метаданных при копировании объекта необходимо включить в запрос заголовок x-amz-metadata-directive → REPLACE ). Однако ACL не сохраняется и для пользователя, отправляющего запрос, настроен как частный.

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

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

    Если копирование успешно, вы получите ответ, содержащий информацию о скопированном объекте.

    Права доступа

    При копировании объекта вы можете дополнительно указать учетные записи или глобальные группы, которым должны быть предоставлены права для нового объекта. Существует два способа предоставлять права, используя заголовки запросов:

    Укажите связанный ACL с помощью заголовка запроса x-amz-acl .

    Укажите разрешения доступа явным образом с помощью заголовков x-amz-grant-read, x-amz-grant-read-acp,x-amz-grant-write-acp и x-amz-grant-full-control . Эти заголовки сопоставляются с набором прав, поддерживаемых сервисом в ACL.

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

    Запросы

    Синтаксис

    Синтаксис показывает только некоторые заголовки запросов. Для получение полного списка возможных заголовков запросов для данного метода смотрите «Типовые заголовки запросов» .

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

    Эта реализация операции не использует параметры запроса.

    Заголовки запроса

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

    Имя исходного контейнера и имя ключа исходного объекта, разделенные косой чертой (/).

    • Тип: String
    • По умолчанию: отсутствует
    • Ограничения: Эта строка должна быть закодирована как URL. Кроме того, исходный контейнер должен быть действительным, и вы должны иметь READ -доступ к копируемому объекту.
    Имя Описание Обязательно
    x-amz-copy-source Да

    Заголовки запросов списка контроля доступа (ACL)

    С этой операцией вы можете дополнительно использовать следующие заголовки, связанные с управлением доступом. По умолчанию все объекты являются частными. Только владелец имеет полный доступ. При добавлении нового объекта вы можете предоставлять разрешения отдельным учетным записям Cloud Storage или глобальным группам. Эти разрешения затем добавляются в список контроля доступа (ACL) объекта. Эта операция позволяет предоставить права доступа одним из двух способов:

    1. Указание предопределенного ACL. Сервис поддерживает набор связанных ACL. Каждый связанный ACL имеет определенный набор получателей и разрешений.

    Предопределенный ACL, применяемый к объекту.

    • Тип: String
    • По умолчанию: private
    • Допустимые значения: private | public-read | public-read-write | authenticated-read | bucket-owner-read | bucket-owner-full-control
    • Ограничения: отсутствует
    Имя Описание Обязательно
    x-amz-acl Нет

    2. Явное указание прав доступа. Если вы хотите явно предоставить разрешения доступа определенным учетным записям Cloud Storage или группам, вы можете использовать следующие заголовки. Каждый из этих заголовков сопоставляется с определенными разрешениями, которые сервис поддерживает в ACL. В заголовке вы указываете список получателей каждого конкретного разрешения.

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

    • Тип: String
    • По умолчанию: отсутствует
    • Ограничения: отсутствует

    Не применяется к объекту.

    • Тип: String
    • По умолчанию: отсутствует
    • Ограничения: отсутствует

    Позволяет получателю читать права, установленные на объекте

    • Тип: String
    • По умолчанию: отсутствует
    • Ограничения: отсутствует

    Предоставляет получателю разрешения READ, READ_ACP и WRITE_ACP для объекта.

    • Тип: String
    • По умолчанию: отсутствует
    • Ограничения: отсутствует
    Имя Описание Обязательно
    x-amz-grant-read Нет
    x-amz-grant-write Нет
    x-amz-grant-read-acp Нет
    x-amz-grant-write-acp Позволяет получателю устанавливать права на объект
    • Тип: String
    • По умолчанию: отсутствует
    • Ограничения: отсутствует
    Нет
    x-amz-grant-full-control Нет

    Вы указываете каждого получателя в виде пары тип = значение, где тип может быть одним из следующих:

    • EmailAddress — если указанное значение является адресом электронной почты проекта Cloud Storage
    • > Например, следующий заголовок x-amz-grant-read предоставляет разрешение на чтение данных и метаданных объекта для проектов Cloud Storage, идентифицированных по адресам электронной почты.

    Элементы запроса

    Эта реализация операции не использует элементы запроса.

    Ответы

    Элементы ответа

    Контейнер для всех элементов ответа.

    • Тип: Container
    • Родительские объекты: отсутствует

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

    • Тип: String
    • Родительские объекты: CopyObjectResult

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

    • Тип: String
    • Родительские объекты: CopyObjectResult
    Имя Описание
    CopyObjectResult
    ETag
    LastModified

    Пример

    В данном примере копируется my-image.jpg в контейнер bucket c именем my-second-image.jpg.

    Запрос

    Ответ

    CopyObjectResult >
    LastModified >2009-10-28T22:32:00 LastModified >
    ETag >»9b2cf535f27731c974343645a3985328″ ETag >
    CopyObjectResult >

    PUT Object ACL

    Описание

    Эта реализация операции PUT использует субресурс ACL для установки списка управления доступом (ACL) для объекта, который уже существует в контейнере. У вас должно быть разрешение WRITE_ACP для установки прав доступа на объект.

    Установить разрешения на объект можно двумя способами:

    • указание ACL в тексте запроса;
    • указание разрешения с помощью заголовков запросов.

    В зависимости от потребностей вашего приложения вы можете установить ACL для объекта, используя текст запроса или заголовки. Например, если у вас есть существующее приложение, которое обновляет права доступа объекта с помощью текста запроса, вы можете продолжать использовать этот способ.

    Синтаксис

    Следующий запрос показывает синтаксис отправки ACL в тексте запроса. Если вы хотите использовать заголовки для установления прав на объект, вы не можете отправить ACL в тексте запроса. Вместо этого см. список заголовков, которые вы можете использовать, в разделе «Заголовки запросов».

    Синтаксис показывает некоторые заголовки запросов.

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

    Эта реализация операции не использует параметры запроса.

    Заголовки запроса

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

    Заголовки запросов списка контроля доступа (ACL)

    Эти заголовки позволяют устанавливать разрешения одним из следующих способов:

    • указание предопределенного ACL;
    • указание разрешений для каждого получателя явным образом;

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

    Связанный ACL, применяемый к объекту.

    • Тип: String
    • По умолчанию: private
    • Допустимые значения: private | public-read | public-read-write | authenticated-read | bucket-owner-read | bucket-owner-full-control
    • Ограничения: отсутствует

    Если вам необходимо предоставить индивидуальные права доступа к объекту, вы можете использовать следующие заголовки x-amz-grant-permission. При использовании этих заголовков вы указываете явные права и получателей (проекты Cloud Storage или глобальные группы), которые получат права. Если вы используете эти заголовки ACL, вы не можете использовать заголовок x-amz-acl для установки связанного ACL.

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

    Имя Описание Обязательно
    x-amz-acl

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

    • Тип: String
    • По умолчанию: отсутствует
    • Ограничения: отсутствует

    Не применяется для объекта .

    • Тип: String
    • По умолчанию: отсутствует
    • Ограничения: отсутствует

    Позволяет получателю читать права, установленные на объекте.

    • Тип: String
    • По умолчанию: отсутствует
    • Ограничения: отсутствует

    Позволяет получателю устанавливать права на объект.

    • Тип: String
    • По умолчанию: отсутствует
    • Ограничения: отсутствует

    Предоставляет получателю права READ , READ_ACP и WRITE_ACP для объекта.

    • Тип: String
    • По умолчанию: отсутствует
    • Ограничения: отсутствует
    Имя Описание Обязательно
    x-amz-grant-read Нет
    x-amz-grant-write Нет
    x-amz-grant-read-acp Нет
    x-amz-grant-write-acp Нет
    x-amz-grant-full-control Нет

    Вы указываете каждого получателя в виде пары тип = значение, где тип может быть одним из следующих:

    • emailAddress — если указанное значение является адресом электронной почты проекта Cloud Storage (домен для нас)
    • > Например, следующий заголовок x-amz-grant-read предоставляет право на чтение данных и метаданных объекта для проектов Cloud Storage, идентифицированных по адресам электронной почты.

    Элементы запроса

    Если вы решите использовать текст запроса для указания ACL, вы должны использовать следующие элементы.

    Если вы используете текст запроса, вы не можете использовать заголовки запросов для установки ACL.

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

    • Тип: Container
    • Родительские объекты: AccessControlPolicy

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

    • Тип: Container
    • Родительские объекты: отсутствует
    • Тип: String
    • Родительские объекты: AccessControlPolicy.Owner

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

    • Тип: Container
    • Родительские объекты: AccessControlPolicy.AccessControlList

    Информация о группе (URI) или о проекте (домен и идентификатор) .

    • Тип: String
    • Родительские объекты: AccessControlPolicy.AccessControlList.Grant

    Идентификатор владельца контейнера или идентификатор получателя.

    • Тип: String
    • Родительские объекты: AccessControlPolicy.Owner или AccessControlPolicy.AccessControlList.Grant

    Блок, содержащий информацию о проекте, владеющим объектом. (Информация включает домен и идентификатор проекта).

    • Тип: Container
    • Родительские объекты: AccessControlPolicy

    Указывает право , предоставляемое проекту или глобальной группе ( FULL_CONTROL, READ, WRITE, READ_ACP, WRITE_ACP )

    • Тип: String
    • Допустимые значения: FULL_CONTROL | WRITE | WRITE_ACP | READ | READ_ACP
    • Родительские объекты: AccessControlPolicy.AccessControlList.Grant

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

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

    • С помощью идентификатора пользователя:

    DisplayName — имя домена (first.bizml.ru) опционально и игнорируется при запросе.

    • С помощью адреса электронной почты:

    EmailAddress — имя домена ( first.bizml.ru ).

    • С помощью URI:

    Ответы

    Элементы ответа

    Эта операция не возвращает элементы ответа.

    Примеры

    Пример 1

    Данный запрос устанавливает права доступа на существующий объект. Запрос определяет список прав доступа в теле запроса.

    Запрос

    Ответ

    Пример 2

    Установление прав доступа с использованием заголовков.

    Запрос

    Ответ

    HEAD Object

    Описание

    Операция HEAD извлекает метаданные из объекта без возвращения самого объекта. Данная операция используется только в том случае, если вам нужны только метаданные объекта. Для того, чтобы воспользоваться операцией HEAD, вам необходимо обладать правами на чтение объекта (READ).

    Для запроса операции HEAD указываются те же параметры, что и для операции GET для объекта. Ответ идентичен ответу GET, за исключением отсутствия тела ответа.

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

    Разрешения

    Для выполнения данной операции необходимо иметь разрешение s3:GetObject . Если запрашиваемый вами объект не существует, то возвращаемая сервисом ошибка зависит от того, есть ли у вас дополнительное разрешение s3:ListBucket .

    • Если у вас есть разрешение s3:ListBucket на бакете, то сервис возвращает ошибку — код состояния HTTP 404 («ключ отсутствует»).
    • Если у вас нет разрешения s3:ListBucket , то сервис возвращает ошибку — код состояния HTTP 403 («ошибка доступа»).

    Запросы

    Синтаксиc

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

    Данная реализация операции не использует параметры запроса.

    Заголовки запроса

    Данная реализация операции может использовать следующие заголовки запроса в дополнение к заголовкам запроса, свойственным всем операциям. Ограничение по размеру заголовков запроса — 8 КБ. Дополнительная информация находится в статье «Типовые заголовки запросов».

    Имя Описание
    AccessControlList
    AccessControlPolicy
    DisplayName
    Grant
    Grantee
    ID
    Owner
    Permission

    Загружает указанный диапазон байтов объекта. Для получения дополнительной информации об HTTP-заголовке «Range» смотрите http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.

    • Тип: String
    • По умолчанию: нет значения
    • Ограничения: нет

    Возвращает объект только в случае его изменения после указанного времени. В противном случае возвращается код 304 — «нет изменений» (см. примечание 2 под таблицей).

    • Тип: String
    • По умолчанию: нет значения
    • Ограничения: нет

    Возвращает объект только в случае отсутствия его изменения после указанного времени. В противном случае возвращается код 412 — «предусловие не соблюдено» (см. примечание 1 под таблицей).

    • Тип: String
    • По умолчанию: нет значения
    • Ограничения: нет

    Возвращает объект только если его тег сущности (Etag) совпадает с указанным. В противном случае возвращается код 412 — «предусловие не соблюдено» (см. примечание 1 под таблицей).

    • Тип: String
    • По умолчанию: нет значения
    • Ограничения: нет

    Возвращает объект только если его тег сущности (Etag) отличается от указанного. В противном случае возвращается код 304 — «нет изменений» (см. примечание 2 под таблицей).

    • Тип: String
    • По умолчанию: нет значения
    • Ограничения: нет

    Примечание

    Заголовки запросов на шифрование, такие как x-amz-server-side-encryption , для запросов GET отправлять не надо, если ваш объект использует шифрование на стороне сервера при помощи сервиса или службы управления ключами. Если ваш объект использует эти типы ключей, то вы получите код ошибки HTTP 400 («неверный запрос»).

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

    Если оба заголовка If-Match и If-Unmodified-Since присутствуют в запросе и при этом

    условие If-Match выражено как true и

    условие If-Unmodified-Since выражено как false , то

    сервис возвращает код «200 OK» и запрашиваемые данные. Для получения дополнительной информации по условным запросам смотрите RFC 7232.

    Если оба заголовка If-None-Match и If-Modified-Since присутствуют в запросе и при этом

    условие If-None-Match выражено как false и

    условие If-Modified-Since выражено как true , то

    сервис возвращает код ответа 304 («нет изменений»). Для получения дополнительной информации по условным запросам смотрите RFC 7232.

    Заголовки запроса, характерные для шифрования на стороне сервера с помощью пользовательских ключей шифрования

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

    Имя Описание Обязательно
    Range Нет
    If-Modified-Since Нет
    If-Unmodified-Since Нет
    If-Match Нет
    If-None-Match

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

    • Тип: String
    • По умолчанию: нет значения
    • Допустимые значения: AES256

    Ограничения: необходимо также указать допустимые заголовки x-amz-server-side-encryption-customer-key и x-amz-server-side-encryption-customer-key-MD5 .

    Указывает зашифрованный алгоритмом Base64 пользовательский ключ шифрования для расшифровки запрошенного объекта. Данное значение используется для расшифровки, а затем оно отбрасывается — сервис не хранит ключ шифрования. Этот ключ должен быть подходящим для использования с алгоритмом, указанном в заголовке x-amz-server-side-encryption-customer-algorithm .

    • Тип: String
    • По умолчанию: нет значения

    Ограничения: необходимо также указать допустимые заголовки x-amz-server-side-encryption-customer-algorithm и x-amz-server-side-encryption-customer-key-MD5 .

    Указывает зашифрованную алгоритмом Base64 128-битную MD5-свертку пользовательского ключа шифрования согласно RFC 1321. Если этот заголовок включен в ваш запрос, то сервис использует данный заголовок для проверки целостности сообщения, чтобы удостовериться в том, что передача ключа шифрования была безошибочной.

    • Тип: String
    • По умолчанию: нет значения

    Ограничения: необходимо также указать допустимые заголовки x-amz-server-side-encryption-customer-algorithm и x-amz-server-side-encryption-customer-key .

    Элементы запроса

    Данная реализация операции не использует элементы запроса.

    Ответы

    Заголовки ответа

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

    Имя Описание Обязательно
    x-amz-server-side?-encryption?-customer-algorithm Да
    x-amz-server-side?-encryption?-customer-key Да
    x-amz-server-side?-encryption?-customer-key-MD5

    Сервис вернет данный заголовок, если истечения срока Expiration настроено для объекта как часть конфигурации жизненного цикла бакета. Значение заголовка включает в себя компонент «expiry-date» и закодированный с помощью URL компонент «rule-id». Необходимо отметить, что для бакетов с контролем версий, данный заголовок применим только к текущим версиям — сервис не предоставляет заголовок для определения возможности перманентного удаления другой версии.

    • Тип: String

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

    • Тип: String

    Данный заголовок устанавливается на количество элементов метаданных, которые не были возвращены в заголовках x-amz-meta, что может произойти при создании метаданных с помощью такого API, как SOAP, который поддерживает более гибкие метаданные по сравнению с API REST. Например, с SOAP вы можете создавать метаданные со значениями, не являющимися допустимыми заголовками HTTP.

    • Тип: String

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

    При межрегионной репликации у вас есть исходный бакет, на котором вы настраиваете дублирование, и бакет назначения, где сервис хранит копии объекта. При запросе объекта (операция GET) или метаданных объекта (операция HEAD) из этих бакетов, сервис возвращает заголовок x-amz-replication-status в ответе как указано ниже.

    • При запросе объекта из исходного бакета, сервис возвращает заголовок x-amz-replication-status в том случае, если ваш запрос доступен для репликации.

    Например, вы указываете префикс объекта «TaxDocs» в конфигурации репликации, отправляя запрос сервису на создание копий объектов с префиксом ключа «TaxDocs». Затем все загружаемые вами объекты с этим префиксом имени ключа, например «TaxDocs/document1.pdf», становятся доступными для репликации. Для любого запроса объекта с этим префиксом имени ключа сервис будет возвращать заголовок x-amz-replication-status со значением PENDING («ожидание»), COMPLETED («завершено») или FAILED («ошибка»), обозначающим состояние объекта.

    • При запросе объекта из бакета назначения сервис возвращает заголовок x-amz-replication-status со значением REPLICA («копия») в том случае, если ваш запрос является созданной сервисом копией.
    • Допустимые значения: PENDING, COMPLETED, FAILED, REPLICA
    • Тип: String

    Если объект является заархивированным (т. е. объектом с холодным классом хранения GLACIER), то ответ включает в себя данный заголовок при условии текущего выполнения восстановления архива или уже выполненного восстановления копии архива.

    Если восстановление копии архива уже было произведено, то значение заголовка указывает на запланированную дату и время удаления копии объекта. Например: x-amz-restore: ongoing-request=»false», expiry-date=»Fri, 23 Dec 2012 00:00:00 GMT»

    Если восстановление объекта выполняется, то заголовок возвращает значение ongoing-request=»true» .

    • Тип: String
    • По умолчанию: нет значения

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

    • Тип: String

    Если элемент x-amz-server-side-encryption присутствует и при этом его значение равно значению aws:kmz , то данный заголовок указывает идентификатор главного ключа шифрования службы управления ключами, использованного для объекта.

    • Тип: String

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

    • Тип: String
    • Допустимые значения: AES256

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

    • Тип: String

    Предоставляет информацию о классе хранения объекта. Сервис возвращает этот заголовок для всех объектов, кроме объектов класса хранения Standard.

    • Тип: String
    • По умолчанию: нет значения

    Идентификатор версии возвращаемого объекта.

    • Тип: String
    Имя Описание
    x-amz-expiration
    x-amz-meta-*
    x-amz-missing-meta
    x-amz-replication-status
    x-amz-restore
    x-amz-server-side-encryption
    x-amz-server-side-encryption-aws-kms-key-id
    x-amz-server-side-encryption-customer-algorithm
    x-amz-server-side-encryption-customer-key-MD5
    x-amz-storage-class
    x-amz-version-id

    Элементы ответов

    Данная реализация операции не возвращает элементы ответов.

    Примеры

    Пример 1

    Запрос

    Нижеуказанный запрос возвращает метаданные объекта.

    Ответ

    Если запланировано истечение срока объекта, согласно настройке жизненного цикла на бакете, то ответ возвращает тег x-amz-expiration с информацией о том, когда сервис удалит объект.

    Пример 2

    Запрос

    Следующий запрос возвращает метаданные указанной версии объекта.

    Ответ

    Пример 3. Для объекта из облака для холодных данных

    Запрос

    Для заархивированного объекта заголовок x-amz-restore указывает дату окончания срока хранения восстановленной копии, как это указано в примере ниже. Даже если объект хранится в облаке для холодных данных, все метаданные объекта остаются доступными.

    Ответ

    OPTIONS Object

    Описание

    Браузер может отправлять предполетный запрос OPTIONS в сервис для определения возможности отправки фактического запроса вместе с указанным источником, методом HTTP и заголовками.

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

    Если технология CORS не разрешена на бакете, то сервис возвращает ответ «403 Forbidden».

    Запросы

    Синтаксис

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

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

    Заголовки запроса

    Определяет источник Cross-origin-запроса к сервису, например http://www.example.com.

    • Тип: String
    • По умолчанию: нет значения

    Определяет метод HTTP, используемый в фактическом запросе.

    • Тип: String
    • По умолчанию: нет значения

    Разделенный запятой список заголовков HTTP для отправления в фактическом запросе.

    Например, для того, чтобы выполнить операцию PUT для объекта с шифрованием на стороне сервера, данный предполетный запрос определит, сможет ли он включить в запрос заголовок x-amz-server-side-encryption.

    • Тип: String
    • По умолчанию: нет значения
    Имя Описание Обязательно
    Origin Да
    Access-Control-Request-Method Да
    Access-Control-Request-Headers Нет

    Элементы запроса

    Данная реализация операции не использует элементы запроса.

    Ответы

    Заголовки ответов

    Источник, который вы отправили в запросе. Если использование этого источника не разрешено в вашем запросе, то сервис не включит этот заголовок в ответ.

    • Тип: String

    Время в секундах, предоставляемое для кеширования результатов предполетного запроса.

    • Тип: String

    Метод HTTP, отправленный в оригинальном запросе. Если использование этого метода в запросе не разрешено, то сервис не включит этот заголовок в ответ.

    • Тип: String

    Разделенный запятой список заголовков HTTP, которые разрешено отправлять браузеру в фактическом запросе. Если использование любого из запрашиваемых заголовков не разрешено, то сервис не включит этот заголовок в ответ, а сам ответ не будет содержать каких-либо заголовков с префиксом Access-Conrol .

    • Тип: String

    Разделенный запятой список заголовков HTTP. Данный заголовок предоставляет доступ клиенту JavaScript к этим заголовкам в ответ на фактический запрос.

    • Тип: String
    Заголовок Описание
    Access-Control-Allow-Origin
    Access-Control-Max-Age
    Access-Control-Allow-Methods
    Access-Control-Allow-Headers
    Access-Control-Expose-Headers

    Элементы ответов

    Данная реализация операции не возвращает элементы ответов.

    Что такое AMP: подробное руководство по ускоренным мобильным страницам

    Время чтения: 24 минуты Нет времени читать? Нет времени?

    Ускоренные мобильные страницы или AMP — технология, которая обеспечивает удобное получение информации в интернете с экранов смартфонов и планшетов. Как работает AMP? Как создать и кастомизировать ускоренные мобильные страницы? Какими инструментами могут воспользоваться владельцы сайтов на популярных CMS, включая WordPress, Joomla!, Drupal, OpenCart? С какими подводными камнями сталкиваются вебмастера при внедрении AMP, и как решить проблемы? Ответы на эти и другие вопросы в руководстве.

    Что такое AMP и как они работают

    AMP — акроним, который образован из первых букв английских слов accelerated mobile pages. По-русски это ускоренные мобильные страницы. Термином обозначают технологию отображения страниц сайта для мобильных пользователей, которая обеспечивает максимальную скорость загрузки сайта.

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

    AMP — это платформа с открытым кодом. Поэтому каждый желающий может использовать ускоренные мобильные страницы бесплатно.

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

    Ускоренные страницы состоят из HTML-разметки со специальными тегами и библиотеки JavaScript. Для создания AMP можно использовать ограниченный набор тегов и скриптов. Это уменьшает функциональность и внешнюю привлекательность страниц, но резко увеличивает скорость их загрузки. Также ускорению загрузки способствует предварительное кэширование.

    Серферы могут пользоваться AMP двумя принципиально разными способами. Первый предполагает передачу данных с сервера владельца сайта на компьютер посетителя и отображение в браузере ускоренной версии страницы. Например, на сайте с поддержкой AMP можно настроить автоматическую переадресацию всех мобильных пользователей на ускоренные страницы. Посетитель может попасть на AMP по ссылке с помощью мобильного девайса или добавить к URL в адресной строке браузера на стационарном ПК суффикс /amp/.

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

    К сожалению, Google не считает нужным показывать AMP-карусели на страницах выдачи, сформированных для моих устройств. Поэтому за пример спасибо Search Engine Land.

    В отличие от Google, «Яндекс» не поддерживает технологию AMP.

    Пока еще крупнейший поисковик рунета не считает ускоренные мобильные страницы дублями. Это объясняется тем, что AMP ссылаются на канонические страницы с помощью атрибута rel=»canonical».

    Тем не менее «Яндекс» индексирует AMP и даже включает их в выдачу. Один из участников популярного SEO-форума рассказал, что поисковик включил ускоренные страницы в выдачу вместо основных. На жалобу техподдержка ответила, что робот не считает атрибут rel=»canonical» строгой директивой. Поэтому AMP оказались в выдаче вместо основных страниц сайта. Топикстартеру пришлось запрещать «Яндексу» индексировать ускоренные страницы в файле robots.txt.

    Стоит ли использовать ускоренные мобильные страницы

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

    Преимущества AMP

    Главное преимущество AMP — высокая скорость загрузки. В таблице результаты тестирования базовой и ускоренной версии страницы с помощью нескольких сервисов.

    PageSpeed Insights от Google

    62 балла для мобильных, 77 баллов для десктопов.

    88 баллов для мобильных, 94 балла для десктопов.

    Инструмент проверки скорости загрузки от Pingdom

    Время загрузки 5,94 секунды, размер страницы 3,5 Мбайт.

    Время загрузки 2,46 секунды, размер страницы 381,4 Кбайт.

    Инструмент проверки скорости загрузки от GTmetrix

    Скорость загрузки 18,6 секунды, размер страницы 3,49 Мбайт.

    Время загрузки 3,4 секунды, размер страницы 314 Кбайт.

    Ускоренные страницы загружаются в разы быстрее стандартных. Это возможно благодаря значительному уменьшению объема данных с помощью технологии AMP.

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

    Быстрая загрузка критически важна для пользователей с мобильными устройствами. Именно поэтому Google предварительно кэширует AMP и выступает в роли CDN для людей, которые пользуются медленным интернетом.

    Google учитывает скорость загрузки страниц при ранжировании сайтов. Это важно в контексте тестирования mobile-first индекса. Обеспечивает ли AMP дополнительные преимущества в рейтинге?

    В середине 2020 года на саммите Search Engine Journal в Чикаго представитель Google Гарри Ильес заявил, что ускоренные мобильные страницы не входят в число факторов ранжирования. Но специалист не смог однозначно сказать, что AMP не будет фактором ранжирования в будущем.

    Что это значит? Технология AMP сама по себе не дает сайтам преимущества при ранжировании. Тем не менее она значительно увеличивает скорость загрузки сайта, которая учитывается при формировании поисковой выдачи.

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

    Итак, основное преимущество ускоренных страниц — высокая скорость загрузки. Она улучшает пользовательский опыт и может опосредованно влиять на позиции сайтов в выдаче Google. Также ресурсы могут получать дополнительные просмотры благодаря карусели AMP.

    Недостатки ускоренных мобильных страниц

    У AMP много недостатков. Вот основные:

    • Данные о посещении ускоренных страниц не попадают в отчеты «Метрики» и Google Analytics, которые формируются благодаря кодам отслеживания на основных страницах сайта. Чтобы отслеживать эффективность AMP, нужно добавить на них код отслеживания вручную или с помощью плагинов.
    • Ускоренные страницы имеют урезанную функциональность по сравнению с базовыми. На AMP нет навигационного меню, блока похожих публикаций, сайдбара, формы комментирования. Нужные элементы приходится «прикручивать» вручную или с помощью плагинов.
    • Внешний вид AMP отличается от базовых страниц не в лучшую сторону. Ради высокой скорости загрузки вы жертвуете визуальной привлекательностью сайта.
    • На AMP нет сторонних виджетов, например, виджетов групп «Вконтакте» или Facebook.
    • Если Google показывает ускоренные страницы сайта в карусели, пользователи могут читать их, не покидая SERP. Поэтому ваш сайт лишается трафика.
    • Теоретически из-за AMP могут возникать проблемы с индексацией. Пример с «Яндексом» описан выше.

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

    Результаты внедрения AMP

    Сначала личный опыт. Внедрил ускоренные страницы на экспериментальной площадке на WordPress в ноябре 2020 года. Проблем с «Яндексом» нет. Эта поисковая система видит AMP, но не включает их в индекс.

    Google быстро индексирует AMP. Информация о них появилась в разделе Search Console «Вид в поиске – Ускоренные мобильные страницы» в течение нескольких дней после внедрения на сайте.

    Практически сразу после индексации Google направляет на AMP трафик. По состоянию на конец февраля 2020 года приблизительно каждый третий посетитель из Google попадает на ускоренную, а не на основную версию страницы. Вот интересная статистика:

    • За неделю с 20 по 26 февраля на тестовую площадку из Google пришло 749 посетителей.
    • 397 из 749 человек — мобильные пользователи.
    • 246 пользователей из Google приземлились на ускоренные страницы.

    На примере конкретного ресурса без претензии на репрезентативность видно, что Google охотно направляет на AMP посетителей. На ускоренные страницы из поисковой системы пришли 32,84 % от общего числа пользователей или 62 % мобильных пользователей. Оставшиеся 38 % владельцев смартфонов и планшетов попали на базовые страницы с адаптивной версткой.

    Вот данные, на которые стоит обратить внимание:

    • За три месяца с момента реализации посетители ускоренных страниц только один раз нажали на объявление AdSense. На ускоренных страницах висит прямоугольный блок 300 на 250 под основным контентом. Другие форматы объявлений пока не тестировал.
    • Показатель отказов AMP значительно выше, чем у стандартных страниц. По данным Google Analytics он достигает 98 %. Это может быть связано с некорректным отслеживанием эффективности ускоренных страниц сервисом Google Analytics. При переходе пользователя с AMP на обычную страницу система мониторинга засчитывает новое посещение. При этом показатель отказов для ускоренных страниц растет, а глубина сессии уменьшается.
    • Показатель просмотренных за сеанс страниц у посетителей AMP ниже чем у посетителей адаптивных страниц. Пользователи намного реже переходят на другие страницы сайта с помощью блока похожих публикаций, чем посетители обычных страниц.
    • На ускоренные страницы практически все пользователи попадают из поисковой системы Google. За неделю Google Analytics зафиксировала несколько посещений с неопределенным источником трафика.
    • Посетители ускоренных страниц редко переходят на полную версию, несмотря на наличие ссылки в футере. За неделю с 20 по 26 февраля сервис аналитики зафиксировал только 10 переходов.

    После реализации AMP скачкообразного изменения трафика из Google не было. Сохранилась динамика умеренного роста посещаемости. На посещаемость из «Яндекса» и других источников ускоренные страницы также не повлияли.

    Одного ресурса со средней посещаемостью из Google около 100 уников в сутки недостаточно, чтобы оценивать результаты использования AMP. Поэтому стоит обратиться к чужому опыту. Вот интересные данные:

    • По результатам исследования Google заявил о более высокой эффективности контекстной рекламы на AMP по сравнению с обычными страницами. Показы объявлений в видимой части экрана выросли на 80 %, а CTR рекламных блоков выросли на 90 %.
    • Участники известного русскоязычного форума о поисковых технологиях относятся к AMP преимущественно негативно. Вебмастера не замечают изменений трафика. Некоторые специалисты считают, что Google придумал AMP, чтобы лишить сайты трафика. В данном случае речь идет о возможности просмотра контента ускоренных страниц на странице выдачи.
    • Любопытные данные от Search Engine Watch. Журнал Wired благодаря AMP получил рост CTR ссылок в поисковой выдаче на 25 %. А кликабельность объявлений на ускоренных страницах выросла на 63 %. Ежемесячная посещаемость сайта журнала Slate после внедрения AMP выросла на 44 %.
    • Представители CNN в интервью The Wall Street Journal сказали, что AMP и обычные страницы монетизируются с помощью рекламы одинаково эффективно.

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

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

    Как установить AMP на WordPress

    Пользователям WordPress повезло: ускоренные мобильные страницы можно реализовать буквально в течение минуты. Для этого установите и активируйте плагин AMP.

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

    Плагин AMP не имеет настроек. Чтобы расширить функциональность и улучшить внешний вид ускоренных страниц, воспользуйтесь надстройкой AMP for WP. После установки и активации плагина перейдите в меню настройки ускоренных страниц в административной панели.

    В разделе General при необходимости загрузите логотип сайта. Рекомендованный размер изображения — 190×36. С помощью кнопки Custom Logo Size вы можете указать произвольный размер логотипа.

    С помощью кнопки Front Page вы можете указать произвольную страницу в качестве главной на AMP-версии сайта.

    Обратите внимание на функцию AMP on Pages. Базовый плагин создает только ускоренные версии страниц записей. Если вам необходимы AMP-версии статических страниц, переключите кнопку в положение On.

    В разделе Analytics подключите отслеживание посещений AMP с помощью Google Analytics. Для этого укажите Google Analytics ID.

    С помощью кнопки Use Google Tag Manager можно подключить Google Analytics с помощью диспетчера тегов Google.

    В разделе Design вы можете изменить внешний вид ускоренных страниц. С помощью кнопки Launch Post Builder запустите drag-and-drop редактор дизайна. Добавляйте и удаляйте элементы страницы, выберите цветовую схему, цвет заголовка и фона.

    Меню Design Selector позволяет выбрать готовые варианты дизайна. В поле Custom CSS можно добавить пользовательские стили.

    В разделе SEO можно настроить отображение на ускоренных страницах метаданных из плагина Yoast SEO, добавить в хедер произвольный HTML-код, а также настроить индексирование страниц архивов и категорий. Если вы не пользуетесь плагином Yoast SEO, оставьте настройки по умолчанию.

    В разделе Menu настройте отображение меню на ускоренных страницах сайта. Для этого перейдите по предложенной ссылке.

    В разделе Advertisement настройте отображение объявлений AdSense. Плагин предлагает четыре варианта размещения рекламы: над шапкой на всех страницах, под футером на всех страницах, а также над и под контентом на страницах публикаций.

    Чтобы разместить объявление под контентом на страницах публикаций, включите кнопку AD #4. Выберите размер объявления. Создайте объявление в аккаунте AdSense и добавьте идентификаторы пользователя и рекламного блока в предложенные поля. Данные возьмите из кода созданного объявления.

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

    Блоки рекомендуемого контента приносят доход при переходах посетителей по рекламным ссылкам, а также стимулируют внутренние переходы на сайте. При выборе размера 300×600 блок выглядит так (см. иллюстрацию).

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

    В разделе Social Share подключите кнопки шеринга социальных сетей. В разделе Structured Data загрузите изображение для микроразметки ускоренных страниц. Google может использовать его при формировании поисковой выдачи. Также укажите размер изображений, которые будут использоваться в сниппетах при публикации ссылок на ускоренные страницы в социальных сетях.

    В разделе Notification можно настроить отображение уведомлений. Например, вы можете сообщить посетителям об использовании cookies. В разделе Translation Panel переведите меню страниц на русский язык.

    В разделе Disqus Comments можно подключить на ускоренных страницах систему комментирования Disqus. Для этого переключите кнопку Disqus Comments Support в положение On, укажите URL ресурса в системе Disqus и путь к файлу комментариев на сервере.

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

    В разделе Advance Settings можно включить ускоренную версию главной страницы, а также страниц рубрик и архивов. За эту функцию отвечают кнопки Homepage Support и Archive Page Support соответственно.

    С помощью кнопки Non-AMP Homepage link in Header and Logo можно включить ссылку на полную версию главной страницы в названии сайта и логотипе. Используйте эту возможность, чтобы перенаправлять посетителей ускоренных страниц на базовую версию сайта.

    Кнопка Mobile Redirection включает автоматическое перенаправление всех мобильных пользователей с адаптивной версии сайта на AMP.

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

    Более того, если Google видит только десктопную версию сайта и AMP, для mobile-first индекса он выбирает версию для стационарных ПК. Это может привести к потере трафика из-за отсутствия адаптации ресурса к мобильным устройствам.

    Обязательно включите ссылку на полную версию страниц в футере с помощью кнопки Link to Non-AMP in footer. Это поможет пользователям переходить на базовые страницы с нормальной функциональностью.

    В разделе Extension можно приобрести и подключить платные надстройки для плагина. Например, вы можете воспользоваться дополнительным инструментом для управления рекламой на ускоренных страницах или добавить на AMP микроразметку «Рейтинг».

    В разделе Fix AMP Errors можно подключить платную поддержку. Разработчики плагина помогут разобраться с настройками и избавиться от уведомлений об ошибках в Search Console.

    Блок Import/Export позволяет перенести настройки ускоренных страниц с одного сайта на другой.

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

    AMP для Drupal

    Чтобы внедрить ускоренные мобильные страницы на сайтах под управлением Drupal, воспользуйтесь следующими инструментами:

    Для работы модуля AMP необходимы плагины Token и Chaos Tools. Если вы планируете показывать на ускоренных страницах объявления AdSense, установите расширение Google AdSense Integration.

    На странице настроек модуля AMP на вкладке AMP Configuration подключите отображение ускоренных версий для публикаций и страниц. Выберите тему, которая будет использована для создания AMP. Укажите Google Analytics ID для отслеживания посещений страниц. Также вы можете использовать для учета просмотров AMP-пиксель.

    На вкладке AMP Metadata укажите название сайта. При необходимости загрузите логотип и выберите его размер.

    После настройки проверьте отображение ускоренных версий страниц. Для этого к URL добавьте значение «?amp». Например, ускоренная версия страницы http://primer-saita.ru/node/1 будет доступна по адресу http://primer-saita.ru/node/1?amp.

    AMP для Joomla!

    Чтобы внедрить ускоренные страницы на сайтах под управлением CMS Joomla!, воспользуйтесь расширением wbAMP. Полная версия этого плагина обойдется вам в 44 доллара США в год. Сборка для сообщества доступна бесплатно.

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

    Оставьте дефолтное значение суффикса для URL AMP. В этом случае для просмотра ускоренных страниц достаточно добавить значение amp. Например, ускоренную версию страницы http://primer-saita.ru/koshki можно будет найти по адресу http://primer-saita.ru/koshki/amp.

    Также на странице основных настроек укажите информацию о сайте и данные издателя. Выберите подходящий тип микроразметки: NewsArticle для новостных заметок и BlogPosting для публикаций в блоге.

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

    Заполните раздел «Правило для com_content». Если вы планируете показывать ускоренные страницы только для публикаций, в поле «Представление» укажите значение Article. В поле «Категории» выберите категории, публикации в которых будут иметь AMP-версии. В полях ID, ID номер материала и «Задача» укажите значение «*». В этом случае AMP будут созданы для всех публикаций в выбранных категориях.

    Другие настройки в бесплатной версии плагина недоступны.

    Существует еще один коммерческий инструмент для создания ускоренных страниц на сайтах под управлением Joomla!: плагин JAmp. Он стоит 39 евро. На тестовом сайте плагина можно увидеть, как инструмент трансформирует стандартную страницу в ускоренную.

    В отличие от WordPress и Drupal, для Joomla! нет полностью бесплатного инструмента для создания AMP.

    AMP для интернет-магазинов

    Технология AMP предназначена в первую очередь для контент-проектов: новостных ресурсов, блогов. Стоит ли создавать ускоренные страницы ecommerce-сайтам?

    Авторы проекта AMP утверждают, что онлайн-магазины могут и должны использовать ускоренные страницы. Главный аргумент в пользу внедрения технологии на ecommerce-ресурсах — повышение скорости загрузки мобильных страниц положительно влияет на конверсию. Кстати, eBay экспериментирует с AMP с середины 2020 года.

    AMP для OpenCart

    Чтобы создать ускоренные страницы для сайта под управлением OpenCart, воспользуйтесь модулем Accelerated Mobile Pages. Это платное решение. Тестовую версию ускоренных мобильных страниц, созданных с помощью модуля, можно посмотреть по ссылке.

    Также вы можете испытать модуль AMP for Product Pages. Это бесплатное решение. Надстройка создает AMP только для страниц товаров. Для работы AMP for Product Pages нужен модуль SEO Friendly URLS.

    Я не могу рекомендовать бесплатный модуль AMP for Product Pages, так как за полтора рабочих дня не смог заставить его работать на тестовом ресурсе. После установки и активации программы на OpenCart версии 2.3.0.2 ускоренные страницы на сайте не появляются. Надстройка добавляет в хедер страниц ссылку на AMP-версию. При переходе по ссылке появляется ошибка 404.

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

    Возможно, проблема связана с отсутствием реального опыта администрирования сайтов под управлением ОС OpenCart. Пользователи профильного форума отзываются о модуле AMP for Product Pages преимущественно позитивно.

    AMP для Magento

    Если ваш интернет-магазин работает на платформе Magento, воспользуйтесь платным плагином Accelerated Mobile Pages. Модуль создает AMP для главной, страниц категорий и товаров.

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

    AMP для PrestaShop

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

    Возможности модуля можно оценить на тестовом сайте.

    Внедрять или нет

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

    Для сайтов под управлением Drupal также есть бесплатное решение, которое можно быстро установить и настроить. А вот для Joomla! и движков для интернет-магазинов плагины для создания AMP придется покупать.

    Есть ли смысл использовать AMP, если их функциональность и внешний вид уступают стандартным страницам, а явных преимуществ в ранжировании пока нет?

    «Яндекс» не поддерживает технологию и иногда неправильно индексирует ускоренные страницы. Google может передумать и закрыть проект.

    Но почему-то кажется, что Google не передумает, а «Яндекс» будет вынужден играть по правилам глобального лидера поискового рынка. Логика простая: доля мобильного трафика растет и будет расти. Люди будут выходить в интернет не только с помощью телефонов и часов. На очереди кофеварки и стиральные машины. Поэтому технологии отображения контента на экранах мобильных устройств будут развиваться.

    Кстати, несколько лет назад владельцы сайтов скептически относились к необходимости адаптации сайта под мобильный трафик. Сегодня мобильная версия или адаптивная верстка — обязательное условие эффективной работы онлайн-ресурса. Очень вероятно, что в обозримом будущем технология AMP станет одним из базовых условий эффективности сайтов.

    Hyperwave API Функции

    Integration with Apache

    The integration with Apache and possible other servers is already described in the Hyperwave module which has been the first extension to connect a Hyperwave Server.

    > The API prov > HW_API
  • HW_API_Object
  • HW_API_Attribute
  • HW_API_Error
  • HW_API_Content
  • HW_API_Reason
  • Some basic >HW_API_String, HW_API_String_Array, etc., which exist in the Hyperwave SDK have not been implemented since PHP has powerful replacements for them.

    Each > objectIdentifier The name or id of an object, e.g. «rootcollection», «0x873A8768 0x00000002».

  • parentIdentifier The name or id of an object which is considered to be a parent.
  • object An instance of class HW_API_Object.
  • parameters An instance of class HW_API_Object.
  • version The version of an object.
  • mode An integer value determine the way an operation is executed.
  • attributeSelector Any array of strings, each containing a name of an attribute. This is used if you retrieve the object record and want to include certain attributes.
  • objectQuery A query to select certain object out of a list of objects. This is used to reduce the number of objects which was delivered by a function like hw_api->children() or hw_api->find() .
  • Methods returning boolean can return TRUE, FALSE or HW_API_Error object.

    Руководство по построению HTTP API

    Введение

    Данное руководство содержит рекомендации по проектированию HTTP API, которые были почерпнуты из работы API облачной платформы Heroku, кроме того, оно также содержит информацию о новом функционале и внутреннем API в Heroku.

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

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

    Основы

    Принцип разделения ответственности

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

    Требуйте использования защищенных соединений

    Для получения данных при помощи API используйте только защищенные соединения с TLS.
    Лучше решением было бы отклонять все запросы, не использующие TLS, а именно запросы по http или на 80-ый порт, во избежание небезопасного обмена данными. В случаях, когда это невозможно, отдавайте ответ 403 Forbidden .

    15–16 ноября, Минск, 133–390 br

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

    Требуйте наличие версии в заголовке Accept

    Наличие нескольких версий и переходы между ними может быть одним из самых сложных аспектов проектирования и использования API. Поэтому лучше заранее учесть этот момент.

    Для того, чтобы клиент не пользовался нестабильным API, лучше всего проверять наличие его версии в каждом запросе. При этом стоит избегать указания версии по умолчанию, поскольку это значительно усложняет заголовок, и эта версия также может меняться в будущем.

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

    Используйте заголовок ETags для кеширования

    Включайте заголовок ETags во все запросы, определяя при этом версию возвращаемого ресурса. Это позволит пользователям кэшировать ресурсы и реализовывать условные запросы при помощи использования заголовка If-None-Match , который поможет определить, нужно обновлять кэш или нет.

    Используйте Request-ID для интроспекции

    Включайте заголовок Request-Id , содержащий в себе UUID значение, в каждый ответ сервера. Регистрируя эти значения на клиенте, сервере или другом сервисе, вы получаете возможность отлаживать и диагностировать проблемы, связанные с запросами.

    Разделяйте большие ответы сервера на несколько небольших при помощи заголовка Range

    Большие ответы необходимо разбивать на более мелкие, используя заголовок Range . Для получения более детальной информации о заголовках запросов/ответов, кодах состояний и ограничениях изучите Обсуждение использования заголовка Range в API платформы Heroku .

    Запросы

    Возвращайте соответствующие коды состояний

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

    • 200 – GET запрос завершился успешно, синхронный DELETE или PATCH запрос завершился успешно или синхронный PUT запрос обновил существующий ресурс.
    • 201 – Синхронный POST запрос завершился, синхронный PUT запрос создал новый ресурс.
    • 202 – Принят POST , PUT , DELETE или PATCH запрос, который будет обработан асинхронно.
    • 206 – GET запрос завершился успешно, но будет возвращен частичный ответ (см. раздел про заголовок Range ).

    Обратите внимание на использование кодов состояния ошибок авторизации и аутентификации:

    • 401 Unauthorized – запрос завершился с ошибкой, поскольку пользователь не прошел аутентификацию.
    • 403 Forbidden – запрос завершился с ошибкой, так как пользователь не авторизовался для получения доступа к определенному ресурсу.

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

    • 422 Unprocessable Entity – Ваш запрос был распознан, но содержит неверные параметры.
    • 429 Too Many Requests – Превышен лимит запросов, попробуйте позже.
    • 500 Internal Server Error – Проблема на стороне сервера, проверьте состояние сайта и/или сообщите о проблеме.

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

    По возможности, предоставляйте полные версии ресурсов

    Возвращайте пользователям вашего API полное представление ресурса (то есть объект со всеми атрибутами) во всех ответах, где это возможно. Всегда предоставляйте полную версию ресурса в ответах на запросы с кодами состояния 200 и 201 , включая PUT , PATCH и DELETE запросы.

    Ответы на запросы с кодом состояния 202 не должны содержать все поля объекта

    Ваш API должен принимать сериализованный JSON в теле запроса

    Ваш API должен предусматривать возможность передачи сереализованного JSON в теле PUT / PATCH / POST запросов вместо, либо в дополнение к передаваемым данным формы. Таким образом создается симметрия в JSON-ответах:

    Будьте последовательны при конструировании пути к ресурсу

    Названия ресурсов

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

    Действия

    Старайтесь проектировать такие конечные url, которые не требуют дополнительных действий для отдельных ресурсов. В случаях, когда это необходимо, добавляйте в общий путь компонент «action» для того, чтобы четко определить эти действия:

    Используйте названия компонентов пути и атрибутов в нижнем регистре

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

    Названия атрибутов лучше писать в нижнем регистре, а в качестве разделителя лучше использовать нижнее подчеркивание – таким образом названия полей можно писать без скобок в Javascript:

    Ваш API должен поддерживать доступ к ресурсу не только по его id

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

    Сведите к минимуму количество вложений в пути для доступа к ресурсу

    В моделях данных, в которых присутствуют родительские отношения между сущностями, пути доступа к ресурсам могут иметь большой уровень вложенности:

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

    Ответы

    Предоставляйте UUID запрашиваемых ресурсов

    У каждого ресурса по умолчанию должен быть атрибут id . В качестве значений идентификатора ресурса старайтесь всегда использовать UUID. Не используйте идентификаторы, которые не будут уникальными в масштабе вашего сервиса, особенно автоинкрементные идентификаторы.
    UUID ресурса выводите в формате 8-4-4-4-12:

    Предоставляйте информацию о дате создания и изменения ресурса

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

    Временные величины должны быть форматированы согласно ISO8601

    Принимайте и возвращайте временные данные только в UTC, а выводите в формате ISO8601:

    Отношения с внешними сущностями должны быть вынесены во вложенный объект

    Внешние отношения должны быть сериализованы как вложенный объект:

    А не как поле объекта:

    Такой подход позволяет добавить больше информации о связанном объекте без необходимости менять структуру ответа:

    Создавайте структурированные ответы в случае возникновения ошибок

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

    Показывайте ограничение по количеству запросов

    Ограничение по количеству запросов вводится для поддержания работоспособности системы и возможности качественного обслуживания других клиентов. Для расчета ограничений на количество запросов можно использовать алгоритм текущего ведра. Возвращайте оставшееся количество запросов для каждого запроса в заголовке ответа RateLimit-Remaining .

    JSON во всех ответах должен быть минимизирован

    Лишний пробел увеличивает размер ответа и многие Javascript клиенты для удобочитаемости автоматически отформатируют JSON. Поэтому лучше минимизировать JSON ответы:

    Вы можете опционально добавить возможность получать более развернутый ответ, указывая дополнительный параметр (например, ?pretty=true ) или задавая значения для заголовка Accept ( Accept: application/vnd.heroku+json; version=3; indent=4; ).

    Артефакты

    Предоставляйте удобную для обработки JSON-схему

    Для точного описания вашего API предоставляйте JSON-схему. Для управления схемой используйте prmd, также удостоверьтесь в том, что она проходит валидацию при помощи команды prmd verify .

    Предоставляйте удобочитаемую документацию

    Для того, чтобы разработчики разбирались в принципах работы вашего API, предоставьте им удобную документацию. Если вы создали JSON-схему, используя prmd , как описано выше, вы можете легко сгенерировать Markdown документацию для всех конечных url, используя команду prmd doc .

    Вдобавок к описанию конечных url, предоставьте обзор API, включая туда следующую информацию:

    • процесс аутентификации – получение и использование пользовательского токена;
    • стабильность API и его версию, а также информацию о том, как выбрать нужную версию API;
    • общие заголовки запросов и ответов;
    • формат выдачи ошибки;
    • примеры использования API с клиентами на разных языках;

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

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

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

    Опишите стабильность вашего API

    Вы можете описать степень стабильности вашего API или отдельных конечных url при помощи установки флагов prototype / development / production .

    Для получения дополнительной информации, вы можете изучить документ Политика совместимости Heroku API.

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

    Что такое код hw_api_object >title

    API (application programming interface) — это набор готовых классов, функций, процедур, структур и констант. Вся эта информация предоставляется самим приложением (или операционной системой). При этом пользователю не обязательно понимать, что это API технология обеспечивает взаимодействие модулей. Цель предоставленной информации – использование этих данных при взаимодействии с внешними программами.

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

    В общем случае данный механизм применяется с целью объединения работы различных приложений в единую систему. Это достаточно удобно для исполнителей. Ведь в таком случае к другому приложению можно обращаться как к «черному ящику». При этом не имеет значения его внутренний механизм – программист может вообще не знать, что такое API.

    Функции API

    В процессе работы элементы механизма API организуют многоуровневую иерархию. При этом подчиненные компоненты также получают подобную структуру. Внутри стандартной сетевой модели OSI выделяют как минимум 7 внутренних уровней. Они классифицируются от физического уровня трансляции бит до приложений, таких как протоколы HTTP и IMAP. Таким образом API верхнего использует функциональность нижнего.

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

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

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

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

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

    Типы API

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

    В отдельные группы выделяют интерфейсы управления графическими компонентами программных модулей (API графических интерфейсов wxWidgets, Qt, GTK и т. п.), операционными системами (Amiga ROM Kernel, Cocoa, Linux Kernel APIruen, OS/2 API, POSIX, Windows API), звуковые (DirectMusic/DirectSound, OpenAL), оконные интерфейсы и так далее. Здесь их разделение определяется уровнем приложения в иерархии и функциональностью. Пользователи компьютерных игр обычно не подозревают, что это графический API обеспечивает им такую быструю отрисовку картинки и поразительную яркость изображений.

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

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

    1. Трудности портирования кода программы при переходе от одной API к другой. Они часто появляются при переносе модулей в другие операционные системы.
    2. Снижения объема функциональности интерфейса при переходе к управлению с более низкого уровня на высокий. В этом случае облегчается выполнение строго определенного класса задач. При этом возможности доступа к элементам управления другими регуляторами теряются. Ведь более низкий уровень позволяет легко управлять базовыми компонентами программы.

    API вебмастеров / поисковых систем

    Для вебмастеров и программистов особенно важны Web API. Такие системы управления включают в себя комплект HTTP-запросов. В результате получения таких запросов модуль генерирует строго определенную структуру HTTP-ответов. Для транспортировки информации между ними принято использовать форматы XML или JSON.

    Фактически в этом случае название Web API будет синонимом обозначения веб-службы. Иными словами, это определенные программные системы со своими интерфейсами. Для получения конкретного доступа к ним используется идентификация в сети по веб-адресу. Например, при передаче данный на сервер применяется серверный API.

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

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

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

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

    Обычно порядок работы интерфейса стараются передать в его названии. Мы можем не найти в поиске, что такое syngestureapisampleapp application. Но из названия понятно, что это пример работы интерфейса для единичного пользователя.

    При этом нужно учитывать изменения в интерфейсах, произошедшие после массового внедрения стандартов Web 2.0. В результате был выполнен переход протокола обмена структурированными данными в распределенной вычислительной среде SOAP (от англ. Simple Object Access Protocol — простой протокол доступа к объектам) к архитектурному стилю взаимодействия компонентов распределенного приложения в сети REST (сокр. от англ. Representational State Transfer — «передача состояния представления»). Для многих веб-служб, в число которых входят поисковые системы и интернет-магазины, данный переход привел к упрощению архитектуры и ускорению выполнения задач. Правильная организация информационных потоков приводит к тому, что API сайта предоставляет широкие возможности автоматизации последнего.

    При этом отдельные компоненты REST функционируют примерно таким же образом, как взаимодействуют между собой серверы и клиенты в Интернете. Хотя работа систем на архитектуре REST до сих пор не имеет единого стандарта, большинство RESTful-реализаций используют конкретные стандарты, такие как HTTP, URL, JSON и XML. Здесь особенно важно, что открытый API – это возможность дополнения и расширения системы взаимодействия.

    Полное руководство по использованию Google AMP

    В октябре 2015 года компания объявила о новом формате страниц для мобильных устройств Google Accelerated Mobile Pages (Google AMP), который призван ускорить скорость загрузки страниц на мобильных устройствах.

    По данным Google, загрузка страниц сайта с использованием Google AMP ускоряется на 15-85%.

    Google AMP представляет собой набор 3-х технологий:

    • AMP HTML – фактически это обычный HTML, в котором ряд используемых тэгов заменен на специальные разновидности, поддерживаемые этим форматом.
    • AMP JS – эта библиотека ускоряет и управляет загрузкой ресурсов, дает возможность пользоваться упомянутыми выше специальными тэгами.
    • Google AMP Cache – это основанная на прокси CDN, которая распространяет все валидные AMP-страницы.

    У формата есть несколько интересных ограничений:

    • Разрешены только асинхронные скрипты
    • Нельзя описывать стили с помощью «style» по месту применения, все они должны быть описаны в HTML файле в тэге «style amp-custom»
    • Стили ограничены размером в 50 КБ
    • Параметры «width» и «height» внешних ресурсов, таких как картинки, должен быть указан внутри html
    • Нельзя написать произвольный Javascript-код, можно использовать только поддерживаемую библиотеку AMP JS
    • Шрифты должны быть загружены по ссылке или в CSS-конструкции @font-face

    Как начать внедрение AMP на своем сайте

    Теперь вам всегда придется поддерживать две версии страниц: изначальную версию в том виде, как вы привыкли видеть ее на сайте и AMP-версию.

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

    Отдельным моментом следует рассмотреть, как внедрить форму для сбора лидов на АМР-странице, об этом будет секция ниже.

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

    Также надо иметь в виду, что «amp-img» позволяет показывать разные изображения устройствам с разными разрешениями экрана. Например, возможен такой вариант:

    Если у вас используются анимированные gif-файлы, придется использовать специальный компонент «amp-anim».

    Для видео используется специальный тэг «amp-video», а для того, чтобы вставить видео с YouTube (как это чаще всего делается на сайтах), существует отдельный компонент «amp-youtube».

    Поддерживаются также такие элементы, как «карусели» с изображениями и лайтбоксы, внедрение элементов из Twitter, Facebook, Instagram, Pinterest и Vine через внешние компоненты.

    Также потребуется внести изменения и в исходную страницу в «обычном» HTML. Чтобы у Google и других систем, которые будут поддерживать АРМ, была возможность переключиться на АМР-версию, в исходной статье нужно прописать специальный «link rel» тег с указанием на АМР-страницу. И в обратную сторону, все АМР-страницы должны иметь тег канонической ссылки на исходную версию страницы в обычном HTML.

    Некоторые платформы, которые поддерживают АМР, требуют, чтобы на странице была корректно настроена разметка Schema.org, это также требуется для того, чтобы ваш контент мог показываться в «карусели» новостей на поиске Google.

    Как внедрить форму сбора лидов

    В стандарте АМР много ограничений, поэтому нельзя создать форму сбора лидов «в лоб», но существует хак, как это сделать.

    Iframe поддерживается в amp-html, и iframe может включать в себе произвольный Javascript. Поэтому, чтобы получить форму на своей АМР-странице, вам надо включить компонент «amp-iframe» в секции «head» страницы:

    Затем нужно вставить «amp-iframe» внутри «body» страницы. Нужно, чтобы этот элемент был не менее 600 пикселей или на 75% высоты страницы от верхнего края страницы. URL, используемый в «amp-iframe» использовать https и находиться на том же домене или поддомене, что и страница.

    Работает ли статистика на АМР-страницах

    Да, вы можете отслеживать статистику по вашим АМР-страницам, причем в стандарте применена философия «измерь один раз и сообщи всем», чтобы избежать ситуации, когда множественные коды отслеживания и аналитики замедляют загрузку страницы.

    Существует два способа, которые позволяют отслеживать статистику посещений АМР-страниц:

    • Элемент «amp-pixel»: это простой тег, который может быть использован, чтобы отслеживать просмотры страниц с использованием запроса GET. Много переменных можно передать через него, включая такие как «document_referrer» и «title».
    • Расширенный компонент «amp-analytics»: более продвинутый способ, который позволяет внедрить Google Analytics (или другие подобные системы) на АМР-страницу. Прочитать подробную инструкцию о том, как внедрить Google Analytics для АМР-страниц можно здесь (https://developers.google.com/analytics/devguides/collection/amp-analytics/)

    Google AMP для SEO

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

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

    Никто не хочет получить понижение ранга из-за дублированного контента, и Google требует, чтобы в заголовке страницы на обычном HTML было сделано указание на аналог этой страницы в формате АМР:

    А в заголовке АМР-версии страницы должно быть указание на исходную страницу в обычном HTML:

    При этом возможны ситуации, когда на сайте есть только АМР-страница, то есть не существует аналога страницы в обычном HTML – в этом случае в теге «canonical» нужно указывать саму АМР-страницу.

    Как внедрить Google AMP на сайтах, где используется CMS

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

    Вот как эксперты сайта SEO-Hacker рекомендуют внедрять АМР на WordPress-сайте:

    1. Установить и активировать плагин AMP WordPress plugin (https://wordpress.org/plugins/amp/)

    2. Отредактировать файл .htaccess, чтобы перенаправлять посетителей с мобильными устройствами на АМР-страницы. Для этого надо вставить в .htaccess следующее:

    RewriteCond % (android|blackberry|googlebot-mobile|iemobile|iphone|ipod|#opera mobile|palmos|webos) [NC]

    RewriteRule ^([a-zA-Z0-9-]+)([/]*)$ https://example.com/$1/amp [L,R=302]

    Для Drupal Google AMP внедряется похожим образом – для этого используются AMP-модуль (https://www.drupal.org/project/amp), АМР-тема (https://www.drupal.org/project/amptheme) и АМР-библиотека на PHP (https://github.com/Lullabot/amp-library).

    При установке АМР-модуля, формат АМР становится доступен для всех типов страниц и «отдает» АМР-страницы, если добавить к URL страницы «?amp» на конце.

    АМР-тема разработана, чтобы обеспечивать специфическую разметку, которую требует стандарт, она автоматически становится активной, если обращение идет к странице с «?amp» на конце. Как любая другая тема Drupal, эта тема может быть расширена с помощью подтемы, что позволяет владельцам сайтов кастомизировать выдачу АМР-страниц, как они посчитают нужным.

    АМР-библиотека используется для случаев, когда пользователи вводят HTML в поля, позволяющие это делать, и выдает предупреждение для тех случаев, когда введенный текст не соответствует АМР-стандарту. Библиотека также автоматически корректирует HTML-текст там, где это возможно, в том числе меняет тэги img и iframe на их АМР-эквиваленты.

    В Joomla возможность выдавать АМР-страницы пользователям обеспечивается с помощью плагина wbAMP (https://weeblr.com/joomla-accelerated-mobile-pages/wbamp).

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

    Какие браузеры поддерживают Google AMP

    По данным AMP Project, поддерживаются 2 последних версии Chrome, Firefox, Edge, Safari и Opera. Также поддерживают, но не совсем корректно отображают АМР-страницы системный браузер Android 4.0 и Chrome версии 28 и старше на мобильных устройствах.

    В заключение давайте подведем итог, в чем плюсы и минусы стандарта Google AMP?

    • AMP – это открытый стандарт.
    • Увеличение скорости загрузки страниц может дать преимущество в SEO, поскольку скорость загрузки является одним из факторов ранжирования.
    • Поскольку этот стандарт разработан Google, можно ожидать, что само наличие AMP-страниц для выдачи мобильным пользователям на сайте может в будущем стать фактором ранжирования, по крайней мере для Google.
    • АМР-страницы могут попасть в «карусель» в мобильной выдаче в топе Google.
    • Большие возможности для кастомизации, и в том числе возможность не использовать AMP Cache от Google и отдавать контент со своей CDN или своего сервера.
    • Наличие плагинов для популярных CMS, которые облегчают внедрение AMP на сайте.
    • AMP может оказаться сложен во внедрении, если вы не веб-разработчик или хотя бы не понимаете HTML.
    • АМР добавляет сложности. Мы вынуждены заниматься внедрением еще одной технологии, вместо того, чтобы оптимизировать имеющееся.
    • Возможности кастомизации при внедрении в CMS достаточно ограничены, возможно это изменится со временем.
    • Поддержка кастомного Javascript возможна только через «amp-iframe», но это не дает возможности получить доступ к данным из этого скрипта.
    • IE11 не поддерживает пока стандарт AMP, а значит пользователи Windows Phone пока не увидят AMP-страницы, а будут видеть вместо них стандартные HTML-версии этих страниц.

    Справочник по Bot API

    Bot API представляет из себя HTTP-интерфейс для работы с ботами в Telegram.

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

    Список изменений

    3 Октября 2020

    • Новые инструменты для создания HTML5-игр.
    • Новый метод sendGame, новый объект InlineQueryResultGame, новое поле game в объекте Message.
    • Новый параметр url в объекте answerCallbackQuery. Создайте игру с помощью BotFather, чтобы использовать этот параметр.
    • Новое поле callback_game в объекте InlineKeyboardButton, новое поле game_short_name и chat_instance в объекте CallbackQuery, новый объект CallbackGame.
    • Новые методы setGameScore и getGameHighScores.

    Прочие обновления

    • Новый метод getWebhookInfo для проверки текущего статуса вебхука.
    • Теперь можно указать HTTP URL для файла во всех методах, где есть InputFile или file_id. Telegram скачает файл с указанного URL и отправил пользователю. Файлы должны весить не более 5МБ для фото и не более 20МБ для остальных файлов.
    • Новый параметр url в объекте answerCallbackQuery позволит открыть диалог с вашим ботом с уникальными для каждого пользователя параметрами.
    • Добавлено поле switch_inline_query_current_chat в объект InlineKeyboardButton.
    • Добавлено поле caption методы sendAudio, sendVoice, InlineQueryResultAudio, InlineQueryResultVoice, InlineQueryResultCachedAudio и InlineQueryResultCachedVoice.
    • Некоторые ответы сервера теперь могут содержать параметры с описаниями ошибок, произошедших в процессе выполнения вашего запроса.

    Авторизация бота

    Каждому боту при создании присваивается уникальный токен вида 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11 . В документации для простоты вместо него будет использоваться . Подробнее о том, как получить или заменить токен для вашего бота, читайте в этой статье.

    Отправка запросов

    Все запросы к Telegram Bot API должны осуществляться через HTTPS в следующем виде: https://api.telegram.org/bot /НАЗВАНИЕ_МЕТОДА . Например:

    Допускаются GET и POST запросы. Для передачи параметров в Bot API доступны 4 способа:

    • Запрос в URL
    • application/x-www-form-urlencoded
    • application/json (не подходит для загрузки файлов)
    • multipart/form-data (для загрузки файлов)

    Ответ придёт в виде JSON-объекта, в котором всегда будет булево поле ok и опциональное строковое поле description , содержащее человекочитаемое описание результата. Если поле ok истинно, то запрос прошёл успешно и результат его выполнения можно увидеть в поле result . В случае ошибки поле ok будет равно false , а причины ошибки будут описаны в поле description . Кроме того, в ответе будет целочисленное поле error_code , но коды ошибок будут изменены в будущем.

    Все методы регистрозависимы и должны быть в кодировке UTF-8.

    Отправка запросов при получении обновления

    Если ваш бот работает через вебхуки, то вы можете осуществить запрос к Bot API одновременно с отправкой ответа на вебхук. Для передачи параметров нужно использовать один из типов:

    • application/json
    • application/x-www-form-urlencoded
    • multipart/form-data

    Метод для вызова должен быть определён в запросе в поле method . Однако, имейте в виду: невозможно узнать статус и результат такого запроса.

    Примеры таких запросов описаны в FAQ.

    Получение обновлений

    Существует два диаметрально противоположных по логике способа получать обновления от вашего бота: getUpdates и вебхуки. Входящие обновления будут храниться на сервере до тех пор, пока вы их не обработаете, но не дольше 24 часов.

    Независимо от способа получения обновлений, в ответ вы получите объект Update, сериализованный в JSON.

    Update

    Этот объект представляет из себя входящее обновление. Под обновлением подразумевается действие, совершённое с ботом — например, получение сообщения от пользователя.

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

    Поле Тип Описание
    update_id Integer The update‘s unique identifier. Update identifiers start from a certain positive number and increase sequentially. This ID becomes especially handy if you’re using Webhooks, since it allows you to ignore repeated updates or to restore the correct update sequence, should they get out of order.
    message Message Опционально. New incoming message of any kind — text, photo, sticker, etc.
    inline_query InlineQuery Опционально. New incoming inline query
    chosen_inline_result ChosenInlineResult Опционально. The result of an inline query that was chosen by a user and sent to their chat partner.
    callback_query CallbackQuery Опционально. New incoming callback query

    Этот метод используется для получения обновлений через long polling (wiki). Ответ возвращается в виде массива объектов Update.

    Параметры Тип Обязательный Описание
    offset Integer Необязательный Identifier of the first update to be returned. Must be greater by one than the highest among the identifiers of previously received updates. By default, updates starting with the earliest unconfirmed update are returned. An update is considered confirmed as soon as getUpdates is called with an offset higher than its update_id. The negative offset can be specified to retrieve updates starting from -offset update from the end of the updates queue. All previous updates will forgotten.
    limit Integer Необязательный Limits the number of updates to be retrieved. Values between 1—100 are accepted. Defaults to 100.
    timeout Integer Необязательный Timeout in seconds for long polling. Defaults to 0, i.e. usual short polling
    Примечание:
    1. Этот метод не будет работать, если у вас уже подключен webhook.
    2. Во избежания повторяющихся обновлений, рекомендуется высчитывать offset каждый раз заново.

    Этот метод необходим для задания URL вебхука, на который бот будет отправлять обновления. Каждый раз при получении обновления на этот адрес будет отправлен HTTPS POST с сериализованным в JSON объектом Update. При неудачном запросе к вашему серверу попытка будет повторена умеренное число раз.

    Для большей безопасности рекомендуется включить токен в URL вебхука, например, так: https://yourwebhookserver.com/ . Так как никто посторонний не знает вашего токена, вы можете быть уверены, что запросы к вашему вебхуку шлёт именно Telegram.

    Параметры Тип Обязательный Описание
    url String Нет HTTPS url для отправки запросов. Чтобы удалить вебхук, отправьте пустую строку.
    certificate InputFile Нет Загрузка публичного ключа для проверки корневого сертификата. Подробнее в разделе про самоподписанные сертификаты.
    Примечание:
    1. При подключенном и настроенном вебхуке метод getUpdates не будет работать.
    2. При использовании самоподписанного сертификата, вам необходимо загрузить публичный ключ с помощью параметра certificate .
    3. На текущий момент отправка обновлений через вебхуки доступна только на эти порты: 443, 80, 88, 8443.

    Содержит информацию о текущем состоянии вебхука.

    Поле Тип Описание
    url String URL вебхука, может быть пустым
    has_custom_certificate Boolean True, если вебхук использует самозаверенный сертификат
    pending_update_count Integer Количество обновлений, ожидающих доставки
    last_error_date Integer Опционально. Unix-время самой последней ошибки доставки обновления на указанный вебхук
    last_error_message String Опционально. Описание в человекочитаемом формате последней ошибки доставки обновления на указанный вебхук

    Все типы, использующиеся в Bot API, являются JSON-объектами.

    Для хранения всех полей типа Integer безопасно использовать 32-битные знаковые целые числа, если не указано иначе.

    Необязательные поля могут быть опущены в ответе, если они не относятся к ответу.

    Этот объект представляет бота или пользователя Telegram.

    Поле Тип Описание
    id Integer Уникальный идентификатор пользователя или бота
    first_name String Имя бота или пользователя
    last_name String Опционально. Фамилия бота или пользователя
    username String Опционально. Username пользователя или бота

    Этот объект представляет собой чат.

    Поле Тип Описание
    id Integer Уникальный идентификатор чата. Абсолютное значение не превышает 1e13
    type Enum Тип чата: “private”, “group”, “supergroup” или “channel”
    title String Опционально. Название, для каналов или групп
    username String Опционально. Username, для чатов и некоторых каналов
    first_name String Опционально. Имя собеседника в чате
    last_name String Опционально. Фамилия собеседника в чате
    all_members_are_administrators Boolean Опционально.True, если все участники чата являются администраторами

    Этот объект представляет собой сообщение.

    Поле Тип Описание
    message_id Integer Уникальный идентификатор сообщения
    from User Опционально. Отправитель. Может быть пустым в каналах.
    date Integer Дата отправки сообщения (Unix time)
    chat Chat Диалог, в котором было отправлено сообщение
    forward_from User Опционально. Для пересланных сообщений: отправитель оригинального сообщения
    forward_date Integer Опционально. Для пересланных сообщений: дата отправки оригинального сообщения
    reply_to_message Message Опционально. Для ответов: оригинальное сообщение. Note that the Message object in this field will not contain further reply_to_message fields even if it itself is a reply.
    text String Опционально. Для текстовых сообщений: текст сообщения, 0-4096 символов
    entities Массив из MessageEntity Опционально. Для текстовых сообщений: особые сущности в тексте сообщения.
    audio Audio Опционально. Информация об аудиофайле
    document Document Опционально. Информация о файле
    photo Массив из PhotoSize Опционально. Доступные размеры фото
    sticker Sticker Опционально. Информация о стикере
    video Video Опционально. Информация о видеозаписи
    voice Voice Опционально. Информация о голосовом сообщении
    caption String Опционально. Подпись к файлу, фото или видео, 0-200 символов
    contact Contact Опционально. Информация об отправленном контакте
    location Location Опционально. Информация о местоположении
    venue Venue Опционально. Информация о месте на карте
    new_chat_member User Опционально. Информация о пользователе, добавленном в группу
    left_chat_member User Опционально. Информация о пользователе, удалённом из группы
    new_chat_title String Опционально. Название группы было изменено на это поле
    new_chat_photo Массив из PhotoSize Опционально. Фото группы было изменено на это поле
    delete_chat_photo True Опционально. Сервисное сообщение: фото группы было удалено
    group_chat_created True Опционально. Сервисное сообщение: группа создана
    supergroup_chat_created True Опционально. Сервисное сообщение: супергруппа создана
    channel_chat_created True Опционально. Сервисное сообщение: канал создан
    migrate_to_chat_id Integer Опционально. Группа была преобразована в супергруппу с указанным идентификатором. Не превышает 1e13
    migrate_from_chat_id Integer Опционально. Cупергруппа была создана из группы с указанным идентификатором. Не превышает 1e13
    pinned_message Message Опционально. Указанное сообщение было прикреплено. Note that the Message object in this field will not contain further reply_to_message fields even if it is itself a reply.

    Этот объект представляет одну из особых сущностей в текстовом сообщении. Например: хештеги, имена пользователей, ссылки итд.

    Поле Тип Описание
    type String Type of the entity. One of mention ( @username ), hashtag, bot_command, url, email, bold (bold text), italic (italic text), code (monowidth string), pre (monowidth block), text_link (for clickable text URLs)
    offset Integer Offset in UTF-16 code units to the start of the entity
    length Integer Length of the entity in UTF-16 code units
    url String Опционально. For “text_link” only, url that will be opened after user taps on the text

    Этот объект представляет изображение определённого размера или превью файла / стикера.

    Поле Тип Описание
    file_id String Уникальный идентификатор файла
    width Integer Photo width
    height Integer Photo height
    file_size Integer Опционально. Размер файла

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

    Поле Тип Описание
    file_id String Уникальный идентификатор файла
    duration Integer Duration of the audio in seconds as defined by sender
    performer String Опционально. Performer of the audio as defined by sender or by audio tags
    title String Опционально. Title of the audio as defined by sender or by audio tags
    mime_type String Опционально. MIME файла, заданный отправителем
    file_size Integer Опционально. Размер файла

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

    Поле Тип Описание
    file_id String Unique file identifier
    thumb PhotoSize Опционально. Document thumbnail as defined by sender
    file_name String Опционально. Original filename as defined by sender
    mime_type String Опционально. MIME файла, заданный отправителем
    file_size Integer Опционально. Размер файла

    Этот объект представляет стикер.

    Поле Тип Описание
    file_id String Уникальный идентификатор файла
    width Integer Ширина стикера
    height Integer Высота стикера
    thumb PhotoSize Опционально. Превью стикера в формате .webp или .jpg
    file_size Integer Опционально. Размер файла

    Этот объект представляет видеозапись.

    Поле Тип Описание
    file_id String Уникальный идентификатор файла
    width Integer Ширина видео, заданная отправителем
    height Integer Высота видео, заданная отправителем
    duration Integer Продолжительность видео, заданная отправителем
    thumb PhotoSize Опционально. Превью видео
    mime_type String Опционально. MIME файла, заданный отправителем
    file_size Integer Опционально. Размер файла

    Этот объект представляет голосовое сообщение.

    Поле Тип Описание
    file_id String Уникальный идентификатор файла
    duration Integer Продолжительность аудиофайла, заданная отправителем
    mime_type String Опционально. MIME-тип файла, заданный отправителем
    file_size Integer Опционально. Размер файла

    Этот объект представляет контакт с номером телефона.

    Поле Тип Описание
    phone_number String Номер телефона
    first_name String Имя
    last_name String Опционально. Фамилия
    user_id Integer Опционально. Идентификатор пользователя в Telegram

    Этот объект представляет точку на карте.

    Поле Тип Описание
    longitude Float Долгота, заданная отправителем
    latitude Float Широта, заданная отправителем

    Этот объект представляет объект на карте.

    Поле Тип Описание
    location Location Координаты объекта
    title String Название объекта
    address String Адрес объекта
    foursquare_id String Опционально. Идентификатор объекта в Foursquare

    Этот объект содержит фотографии профиля пользователя.

    Поле Тип Описание
    total_count Integer Общее число доступных фотографий профиля
    photos Массив массивов с объектами PhotoSize Запрошенные изображения, каждое в 4 разных размерах.

    Этот объект представляет файл, готовый к загрузке. Он может быть скачан по ссылке вида https://api.telegram.org/file/bot / . Ссылка будет действительна как минимум в течение 1 часа. По истечении этого срока она может быть запрошена заново с помощью метода getFile.

    Максимальный размер файла для скачивания — 20 МБ

    Поле Тип Описание
    file_id String Уникальный идентификатор файла
    file_size Integer Опционально. Размер файла, если известен
    file_path String Опционально. Расположение файла. Для скачивания воспользуйтейсь ссылкой вида https://api.telegram.org/file/bot /

    Этот объект представляет клавиатуру с опциями ответа (см. описание ботов).

    Поле Тип Описание
    keyboard Массив массивов с KeyboardButton Массив рядов кнопок, каждый из которых является массивом объектов KeyboardButton
    resize_keyboard Boolean Опционально. Указывает клиенту подогнать высоту клавиатуры под количество кнопок (сделать её меньше, если кнопок мало). По умолчанию False , то есть клавиатура всегда такого же размера, как и стандартная клавиатура устройства.
    one_time_keyboard Boolean Опционально. Указывает клиенту скрыть клавиатуру после использования (после нажатия на кнопку). Её по-прежнему можно будет открыть через иконку в поле ввода сообщения. По умолчанию False .
    selective Boolean Опционально. Этот параметр нужен, чтобы показывать клавиатуру только определённым пользователям. Цели: 1) пользователи, которые были @упомянуты в поле text объекта Message; 2) если сообщения бота является ответом (содержит поле reply_to_message_id), авторы этого сообщения.

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

    Этот объект представляет одну кнопку в клавиатуре ответа. Для обычных текстовых кнопок этот объект может быть заменён на строку, содержащую текст на кнопке.

    Поле Тип Описание
    text String Текст на кнопке. Если ни одно из опциональных полей не использовано, то при нажатии на кнопку этот текст будет отправлен боту как простое сообщение.
    request_contact Boolean Опционально. Если значение True , то при нажатии на кнопку боту отправится контакт пользователя с его номером телефона. Доступно только в диалогах с ботом.
    request_location Boolean Опционально. Если значение True , то при нажатии на кнопку боту отправится местоположение пользователя. Доступно только в диалогах с ботом.
    Внимание:

    Параметры request_contact и request_location будут работать только в версиях Telegram, выпущенных позже 9 апреля 2020 года. Более старые клиенты проигнорируют это поле.

    После получения сообщения с этим объектом, приложение Telegram свернёт клавиатуру бота и отобразит стандартную клавиатуру устройства (с буквами). По умолчанию клавиатуры бота отображаются до тех пор, пока не будет принудительно отправлена новая или скрыта старая клавиатура. Исключение составляют одноразовые клавиатуры, которые скрываются сразу после нажатия на какую-либо кнопку (см. ReplyKeyboardMarkup).

    Поле Тип Описание
    hide_keyboard Boolean Указание клиенту скрыть клавиатуру бота
    selective Boolean Опционально. Используйте этот параметр, чтобы скрыть клавиатуру только у определённых пользователей. Цели: 1) пользователи, которые были @упомянуты в поле text объекта Message; 2) если сообщения бота является ответом (содержит поле reply_to_message_id), авторы этого сообщения.

    Пример: Пользователь голосует в опросе, бот отправляет сообщение с подтверждением и скрывает клавиатуру у этого пользователя, в то время как у всех остальных клавиатура видна.

    Этот объект представляет встроенную клавиатуру, которая появляется под соответствующим сообщением.

    Поле Тип Описание
    inline_keyboard Массив массивов с InlineKeyboardButton Массив строк, каждая из которых является массивом объектов InlineKeyboardButton.
    Внимание:

    Эти параметры будут работать только в версиях Telegram, выпущенных позже 9 апреля 2020 года. Более старые клиенты покажут ошибку вместо сообщения.

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

    Поле Тип Описание
    text String Текст на кнопке
    url String Опционально. URL, который откроется при нажатии на кнопку
    callback_data String Опционально. Данные, которые будут отправлены в callback_query при нажатии на кнопку
    switch_inline_query String Опционально. Если этот параметр задан, то при нажатии на кнопку приложение предложит пользователю выбрать любой чат, откроет его и вставит в поле ввода сообщения юзернейм бота и определённый запрос для встроенного режима. Если отправлять пустое поле, то будет вставлен только юзернейм бота.

    Примечание: это нужно для того, чтобы быстро переключаться между диалогом с ботом и встроенным режимом с этим же ботом. Особенно полезно в сочетаниями с действиями switch_pm… – в этом случае пользователь вернётся в исходный чат автоматически, без ручного выбора из списка.

    switch_inline_query_current_chat String Опционально. If set, pressing the button will insert the bot‘s username and the specified inline query in the current chat’s input field. Can be empty, in which case only the bot’s username will be inserted.
    callback_game CallbackGame Опционально. Description of the game that will be launched when the user presses the button.

    NOTE: This type of button must always be the first button in the first row.

    Внимание:

    Эти параметры будут работать только в версиях Telegram, выпущенных позже 9 апреля 2020 года. Более старые клиенты покажут ошибку вместо сообщения.

    Этот объект представляет входящий запрос обратной связи от инлайн-кнопки с заданным callback_data .

    Если кнопка, создавшая этот запрос, была привязана к сообщению, то в запросе будет присутствовать поле message .

    Если кнопка была показана в сообщении, отправленном при помощи встроенного режима, в запросе будет присутствовать поле inline_message_id .

    Поле Тип Описание
    id String Уникальный идентификатор запроса
    from User Отправитель
    message Message Опционально. Сообщение, к которому была привязана вызвавшая запрос кнопка. Обратите внимание: если сообщение слишком старое, содержание сообщения и дата отправки будут недоступны.
    inline_message_id String Опционально. Идентификатор сообщения, отправленного через вашего бота во встроенном режиме
    data String Данные, связанные с кнопкой. Обратите внимание, что клиенты могут добавлять свои данные в это поле.

    Upon receiving a message with this object, Telegram clients will display a reply interface to the user (act as if the user has selected the bot‘s message and tapped ’Reply’). This can be extremely useful if you want to create user-friendly step-by-step interfaces without having to sacrifice privacy mode.

    Поле Тип Описание
    force_reply True Shows reply interface to the user, as if they manually selected the bot‘s message and tapped ’Reply’
    selective Boolean Опционально. Use this parameter if you want to force reply from specific users only. Targets: 1) users that are @mentioned in the text of the Message object; 2) if the bot’s message is a reply (has reply_to_message_id), sender of the original message.
    Пример:

    A poll bot for groups runs in privacy mode (only receives commands, replies to its messages and mentions). There could be two ways to create a new poll:

    • Explain the user how to send a command with parameters (e.g. /newpoll question answer1 answer2). May be appealing for hardcore users but lacks modern day polish.
    • Guide the user through a step-by-step process. ‘Please send me your question’, ‘Cool, now let’s add the first answer option‘, ’Great. Keep adding answer options, then send /done when you‘re ready’.

    The last option is definitely more attractive. And if you use ForceReply in your bot‘s questions, it will receive the user’s answers even if it only receives replies, commands and mentions — without any extra work for the user.

    Содержит информацию о том, почему запрос не был успешен.

    Field Type Description
    migrate_to_chat_id Integer Optional. The group has been migrated to a supergroup with the specified identifier. This number may be greater than 32 bits and some programming languages may have difficulty/silent defects in interpreting it. But it is smaller than 52 bits, so a signed 64 bit integer or double-precision float type are safe for storing this identifier.
    retry_after Integer Optional. In case of exceeding flood control, the number of seconds left to wait before the request can be repeated

    This object represents the contents of a file to be uploaded. Must be posted using multipart/form-data in the usual way that files are uploaded via the browser.

    There are two ways of sending a file (photo, sticker, audio etc.). If it‘s a new file, you can upload it using multipart/form-data. If the file is already on our servers, you don’t need to reupload it: each file object has a file_id field, you can simply pass this file_id as a parameter instead.

    Objects and methods used in the inline mode are described in the Inline mode section.

    All methods in the Bot API are case-insensitive. We support GET and POST HTTP methods. Use either URL query string or application/json or application/x-www-form-urlencoded or multipart/form-data for passing parameters in Bot API requests.
    On successful call, a JSON-object containing the result will be returned.

    A simple method for testing your bot’s auth token. Requires no parameters. Returns basic information about the bot in form of a User object.

    Use this method to send text messages. On success, the sent Message is returned.

    Параметры Тип Обязательный Описание
    chat_id Integer or String Yes Unique identifier for the target chat or username of the target channel (in the format @channelusername )
    text String Yes Text of the message to be sent
    parse_mode String Необязательный Send Markdown or HTML, if you want Telegram apps to show bold, italic, fixed-width text or inline URLs in your bot’s message.
    disable_web_page_preview Boolean Необязательный Disables link previews for links in this message
    disable_notification Boolean Необязательный Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound.
    reply_to_message_id Integer Необязательный If the message is a reply, ID of the original message
    reply_markup InlineKeyboardMarkup or ReplyKeyboardMarkup or ReplyKeyboardHide or ForceReply Необязательный Additional interface options. A JSON-serialized object for an inline keyboard, custom reply keyboard, instructions to hide reply keyboard or to force a reply from the user.

    The Bot API supports basic formatting for messages. You can use bold and italic text, as well as inline links and pre-formatted code in your bots’ messages. Telegram clients will render them accordingly. You can use either markdown-style or HTML-style formatting.

    Note that Telegram clients will display an alert to the user before opening an inline link (‘Open this link?’ together with the full URL).

    To use this mode, pass Markdown in the parse_mode field when using sendMessage. Use the following syntax in your message:

    To use this mode, pass HTML in the parse_mode field when using sendMessage. The following tags are currently supported:

    • Only the tags mentioned above are currently supported.
    • Tags must not be nested.
    • All , > and & symbols that are not a part of a tag or an HTML entity must be replaced with the corresponding HTML entities ( with , > with > and & with & ).
    • All numerical HTML entities are supported.
    • The API currently supports only the following named HTML entities: , > , & and » .

    Use this method to forward messages of any kind. On success, the sent Message is returned.

    Параметры Тип Обязательный Описание
    chat_id Integer or String Yes Unique identifier for the target chat or username of the target channel (in the format @channelusername )
    from_chat_id Integer or String Yes Unique identifier for the chat where the original message was sent (or channel username in the format @channelusername )
    disable_notification Boolean Необязательный Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound.
    message_id Integer Yes Unique message identifier

    Use this method to send photos. On success, the sent Message is returned.

    Параметры Тип Обязательный Описание
    chat_id Integer or String Yes Unique identifier for the target chat or username of the target channel (in the format @channelusername )
    photo InputFile or String Yes Photo to send. You can either pass a file_id as String to resend a photo that is already on the Telegram servers, or upload a new photo using multipart/form-data.
    caption String Необязательный Photo caption (may also be used when resending photos by file_id), 0-200 characters
    disable_notification Boolean Необязательный Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound.
    reply_to_message_id Integer Необязательный If the message is a reply, ID of the original message
    reply_markup InlineKeyboardMarkup or ReplyKeyboardMarkup or ReplyKeyboardHide or ForceReply Необязательный Additional interface options. A JSON-serialized object for an inline keyboard, custom reply keyboard, instructions to hide reply keyboard or to force a reply from the user.

    Use this method to send audio files, if you want Telegram clients to display them in the music player. Your audio must be in the .mp3 format. On success, the sent Message is returned. Bots can currently send audio files of up to 50 MB in size, this limit may be changed in the future.

    For sending voice messages, use the sendVoice method instead.

    Параметры Тип Обязательный Описание
    chat_id Integer or String Yes Unique identifier for the target chat or username of the target channel (in the format @channelusername )
    audio InputFile or String Yes Audio file to send. You can either pass a file_id as String to resend an audio that is already on the Telegram servers, or upload a new audio file using multipart/form-data.
    caption Integer Необязательный Название аудио, 0-200 символов
    duration Integer Необязательный Duration of the audio in seconds
    performer String Необязательный Performer
    title String Необязательный Track name
    disable_notification Boolean Необязательный Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound.
    reply_to_message_id Integer Необязательный If the message is a reply, ID of the original message
    reply_markup InlineKeyboardMarkup or ReplyKeyboardMarkup or ReplyKeyboardHide or ForceReply Необязательный Additional interface options. A JSON-serialized object for an inline keyboard, custom reply keyboard, instructions to hide reply keyboard or to force a reply from the user.

    Use this method to send general files. On success, the sent Message is returned. Bots can currently send files of any type of up to 50 MB in size, this limit may be changed in the future.

    Параметры Тип Обязательный Описание
    chat_id Integer or String Yes Unique identifier for the target chat or username of the target channel (in the format @channelusername )
    document InputFile or String Yes File to send. You can either pass a file_id as String to resend a file that is already on the Telegram servers, or upload a new file using multipart/form-data.
    caption String Необязательный Document caption (may also be used when resending documents by file_id), 0-200 characters
    disable_notification Boolean Необязательный Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound.
    reply_to_message_id Integer Необязательный If the message is a reply, ID of the original message
    reply_markup InlineKeyboardMarkup or ReplyKeyboardMarkup or ReplyKeyboardHide or ForceReply Необязательный Additional interface options. A JSON-serialized object for an inline keyboard, custom reply keyboard, instructions to hide reply keyboard or to force a reply from the user.

    Use this method to send .webp stickers. On success, the sent Message is returned.

    Параметры Тип Обязательный Описание
    chat_id Integer or String Yes Unique identifier for the target chat or username of the target channel (in the format @channelusername )
    sticker InputFile or String Yes Sticker to send. You can either pass a file_id as String to resend a sticker that is already on the Telegram servers, or upload a new sticker using multipart/form-data.
    disable_notification Boolean Необязательный Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound.
    reply_to_message_id Integer Необязательный If the message is a reply, ID of the original message
    reply_markup InlineKeyboardMarkup or ReplyKeyboardMarkup or ReplyKeyboardHide or ForceReply Необязательный Additional interface options. A JSON-serialized object for an inline keyboard, custom reply keyboard, instructions to hide reply keyboard or to force a reply from the user.

    Use this method to send video files, Telegram clients support mp4 videos (other formats may be sent as Document). On success, the sent Message is returned. Bots can currently send video files of up to 50 MB in size, this limit may be changed in the future.

    Параметры Тип Обязательный Описание
    chat_id Integer or String Yes Unique identifier for the target chat or username of the target channel (in the format @channelusername )
    video InputFile or String Yes Video to send. You can either pass a file_id as String to resend a video that is already on the Telegram servers, or upload a new video file using multipart/form-data.
    duration Integer Необязательный Duration of sent video in seconds
    width Integer Необязательный Video width
    height Integer Необязательный Video height
    caption String Необязательный Video caption (may also be used when resending videos by file_id), 0-200 characters
    disable_notification Boolean Необязательный Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound.
    reply_to_message_id Integer Необязательный If the message is a reply, ID of the original message
    reply_markup InlineKeyboardMarkup or ReplyKeyboardMarkup or ReplyKeyboardHide or ForceReply Необязательный Additional interface options. A JSON-serialized object for an inline keyboard, custom reply keyboard, instructions to hide reply keyboard or to force a reply from the user.

    Use this method to send audio files, if you want Telegram clients to display the file as a playable voice message. For this to work, your audio must be in an .ogg file encoded with OPUS (other formats may be sent as Audio or Document). On success, the sent Message is returned. Bots can currently send voice messages of up to 50 MB in size, this limit may be changed in the future.

    Параметры Тип Обязательный Описание
    chat_id Integer or String Yes Unique identifier for the target chat or username of the target channel (in the format @channelusername )
    voice InputFile or String Yes Audio file to send. You can either pass a file_id as String to resend an audio that is already on the Telegram servers, or upload a new audio file using multipart/form-data.
    caption Integer Необязательный Название аудиосообщения, 0-200 символов
    duration Integer Необязательный Duration of sent audio in seconds
    disable_notification Boolean Необязательный Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound.
    reply_to_message_id Integer Необязательный If the message is a reply, ID of the original message
    reply_markup InlineKeyboardMarkup or ReplyKeyboardMarkup or ReplyKeyboardHide or ForceReply Необязательный Additional interface options. A JSON-serialized object for an inline keyboard, custom reply keyboard, instructions to hide reply keyboard or to force a reply from the user.

    Use this method to send point on the map. On success, the sent Message is returned.

    Параметры Тип Обязательный Описание
    chat_id Integer or String Yes Unique identifier for the target chat or username of the target channel (in the format @channelusername )
    latitude Float number Yes Latitude of location
    longitude Float number Yes Longitude of location
    disable_notification Boolean Необязательный Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound.
    reply_to_message_id Integer Необязательный If the message is a reply, ID of the original message
    reply_markup InlineKeyboardMarkup or ReplyKeyboardMarkup or ReplyKeyboardHide or ForceReply Необязательный Additional interface options. A JSON-serialized object for an inline keyboard, custom reply keyboard, instructions to hide reply keyboard or to force a reply from the user.

    Use this method to send information about a venue. On success, the sent Message is returned.

    Параметры Тип Обязательный Описание
    chat_id Integer or String Yes Unique identifier for the target chat or username of the target channel (in the format @channelusername )
    latitude Float number Yes Latitude of the venue
    longitude Float number Yes Longitude of the venue
    title String Yes Name of the venue
    address String Yes Address of the venue
    foursquare_id String Необязательный Foursquare identifier of the venue
    disable_notification Boolean Необязательный Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound.
    reply_to_message_id Integer Необязательный If the message is a reply, ID of the original message
    reply_markup InlineKeyboardMarkup or ReplyKeyboardMarkup or ReplyKeyboardHide or ForceReply Необязательный Additional interface options. A JSON-serialized object for an inline keyboard, custom reply keyboard, instructions to hide reply keyboard or to force a reply from the user.

    Use this method to send phone contacts. On success, the sent Message is returned.

    Параметры Тип Обязательный Описание
    chat_id Integer or String Yes Unique identifier for the target chat or username of the target channel (in the format @channelusername )
    phone_number String Yes Contact’s phone number
    first_name String Yes Contact’s first name
    last_name String Необязательный Contact’s last name
    disable_notification Boolean Необязательный Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound.
    reply_to_message_id Integer Необязательный If the message is a reply, ID of the original message
    reply_markup InlineKeyboardMarkup or ReplyKeyboardMarkup or ReplyKeyboardHide or ForceReply Необязательный Additional interface options. A JSON-serialized object for an inline keyboard, custom reply keyboard, instructions to hide keyboard or to force a reply from the user.

    Use this method when you need to tell the user that something is happening on the bot’s side. The status is set for 5 seconds or less (when a message arrives from your bot, Telegram clients clear its typing status).

    Пример:

    The ImageBot needs some time to process a request and upload the image. Instead of sending a text message along the lines of “Retrieving image, please wait…”, the bot may use sendChatAction with action = upload_photo. The user will see a “sending photo” status for the bot.

    We only recommend using this method when a response from the bot will take a noticeable amount of time to arrive.

    Параметры Тип Обязательный Описание
    chat_id Integer or String Yes Unique identifier for the target chat or username of the target channel (in the format @channelusername )
    action String Yes Type of action to broadcast. Choose one, depending on what the user is about to receive: typing for text messages, upload_photo for photos, record_video or upload_video for videos, record_audio or upload_audio for audio files, upload_document for general files, find_location for location data.

    Use this method to get a list of profile pictures for a user. Returns a UserProfilePhotos object.

    Параметры Тип Обязательный Описание
    user_id Integer Yes Unique identifier of the target user
    offset Integer Необязательный Sequential number of the first photo to be returned. By default, all photos are returned.
    limit Integer Необязательный Limits the number of photos to be retrieved. Values between 1—100 are accepted. Defaults to 100.

    Use this method to get basic info about a file and prepare it for downloading. For the moment, bots can download files of up to 20MB in size. On success, a File object is returned. The file can then be downloaded via the link https://api.telegram.org/file/bot / , where is taken from the response. It is guaranteed that the link will be valid for at least 1 hour. When the link expires, a new one can be requested by calling getFile again.

    Параметры Тип Обязательный Описание
    file_id String Yes File identifier to get info about

    Use this method to kick a user from a group or a supergroup. In the case of supergroups, the user will not be able to return to the group on their own using invite links, etc., unless unbanned first. The bot must be an administrator in the group for this to work. Returns True on success.

    Внимание:

    This will method only work if the ‘All Members Are Admins’ setting is off in the target group. Otherwise members may only be removed by the group’s creator or by the member that added them.

    Параметры Тип Обязательный Описание
    chat_id Integer or String Yes Unique identifier for the target group or username of the target supergroup (in the format @supergroupusername )
    user_id Integer Yes Unique identifier of the target user

    Use this method to unban a previously kicked user in a supergroup. The user will not return to the group automatically, but will be able to join via link, etc. The bot must be an administrator in the group for this to work. Returns True on success.

    Параметры Тип Обязательный Описание
    chat_id Integer or String Yes Unique identifier for the target group or username of the target supergroup (in the format @supergroupusername )
    user_id Integer Yes Unique identifier of the target user

    Use this method to send answers to callback queries sent from inline keyboards. The answer will be displayed to the user as a notification at the top of the chat screen or as an alert. On success, True is returned.

    Параметры Тип Обязательный Описание
    callback_query_id String Yes Unique identifier for the query to be answered
    text String Необязательный Text of the notification. If not specified, nothing will be shown to the user
    show_alert Boolean Необязательный If true, an alert will be shown by the client instead of a notification at the top of the chat screen. Defaults to false.
    url String Необязательный URL, который будет открыт у пользователя. Если вы создали игру, приняв условия @Botfather, укажите адрес, на котором расположена ваша игра. Учтите, что это будет работать только если запрос исходит от кнопки callback_game.
    В остальных случаях вы можете использовать параметр для создания ссылок вида telegram.me/your_bot?start=XXXX

    Methods and objects used in the inline mode are described in the Inline mode section.

    The following methods allow you to change an existing message in the message history instead of sending a new one with a result of an action. This is most useful for messages with inline keyboards using callback queries, but can also help reduce clutter in conversations with regular chat bots.

    Please note, that it is currently only possible to edit messages without reply_markup or with inline keyboards.

    Use this method to edit text messages sent by the bot or via the bot (for inline bots). On success, the edited Message is returned.

    Параметры Тип Обязательный Описание
    chat_id Integer or String No Required if inline_message_id is not specified. Unique identifier for the target chat or username of the target channel (in the format @channelusername )
    message_id Integer No Required if inline_message_id is not specified. Unique identifier of the sent message
    inline_message_id String No Required if chat_id and message_id are not specified. Identifier of the inline message
    text String Yes New text of the message
    parse_mode String Необязательный Send Markdown or HTML, if you want Telegram apps to show bold, italic, fixed-width text or inline URLs in your bot’s message.
    disable_web_page_preview Boolean Необязательный Disables link previews for links in this message
    reply_markup InlineKeyboardMarkup Необязательный A JSON-serialized object for an inline keyboard.

    Use this method to edit captions of messages sent by the bot or via the bot (for inline bots). On success, the edited Message is returned.

    Параметры Тип Обязательный Описание
    chat_id Integer or String No Required if inline_message_id is not specified. Unique identifier for the target chat or username of the target channel (in the format @channelusername )
    message_id Integer No Required if inline_message_id is not specified. Unique identifier of the sent message
    inline_message_id String No Required if chat_id and message_id are not specified. Identifier of the inline message
    caption String Необязательный New caption of the message
    reply_markup InlineKeyboardMarkup Необязательный A JSON-serialized object for an inline keyboard.

    Use this method to edit only the reply markup of messages sent by the bot or via the bot (for inline bots). On success, the edited Message is returned.

    Параметры Тип Обязательный Описание
    chat_id Integer or String No Required if inline_message_id is not specified. Unique identifier for the target chat or username of the target channel (in the format @channelusername )
    message_id Integer No Required if inline_message_id is not specified. Unique identifier of the sent message
    inline_message_id String No Required if chat_id and message_id are not specified. Identifier of the inline message
    reply_markup InlineKeyboardMarkup Необязательный A JSON-serialized object for an inline keyboard.

    The following methods and objects allow your bot to work in inline mode.
    Please see our Introduction to Inline bots for more details.

    To enable this option, send the /setinline command to @BotFather and provide the placeholder text that the user will see in the input field after typing your bot’s name.

    This object represents an incoming inline query. When the user sends an empty query, your bot could return some default or trending results.

    Поле Тип Описание
    id String Unique identifier for this query
    from User Sender
    location Location Опционально. Sender location, only for bots that request user location
    query String Text of the query
    offset String Offset of the results to be returned, can be controlled by the bot

    Use this method to send answers to an inline query. On success, True is returned.
    No more than 50 results per query are allowed.

    Параметры Тип Обязательный Описание
    inline_query_id String Yes Unique identifier for the answered query
    results Array of InlineQueryResult Yes A JSON-serialized array of results for the inline query
    cache_time Integer Необязательный The maximum amount of time in seconds that the result of the inline query may be cached on the server. Defaults to 300.
    is_personal Boolean Необязательный Pass True, if results may be cached on the server side only for the user that sent the query. By default, results may be returned to any user who sends the same query
    next_offset String Необязательный Pass the offset that a client should send in the next query with the same text to receive more results. Pass an empty string if there are no more results or if you don‘t support pagination. Offset length can’t exceed 64 bytes.
    switch_pm_text String Необязательный If passed, clients will display a button with specified text that switches the user to a private chat with the bot and sends the bot a start message with the parameter switch_pm_parameter
    switch_pm_parameter String Необязательный Parameter for the start message sent to the bot when user presses the switch button

    Example: An inline bot that sends YouTube videos can ask the user to connect the bot to their YouTube account to adapt search results accordingly. To do this, it displays a ‘Connect your YouTube account’ button above the results, or even before showing any. The user presses the button, switches to a private chat with the bot and, in doing so, passes a start parameter that instructs the bot to return an oauth link. Once done, the bot can offer a switch_inline button so that the user can easily return to the chat where they wanted to use the bot’s inline capabilities.

    This object represents one result of an inline query. Telegram clients currently support results of the following 19 types:

    Represents a link to an article or web page.

    Поле Тип Описание
    type String Type of the result, must be article
    id String Unique identifier for this result, 1-64 Bytes
    title String Title of the result
    input_message_content InputMessageContent Content of the message to be sent
    reply_markup InlineKeyboardMarkup Опционально. Inline keyboard attached to the message
    url String Опционально. URL of the result
    hide_url Boolean Опционально. Pass True, if you don’t want the URL to be shown in the message
    description String Опционально. Short description of the result
    thumb_url String Опционально. Url of the thumbnail for the result
    thumb_width Integer Опционально. Thumbnail width
    thumb_height Integer Опционально. Thumbnail height

    Represents a link to a photo. By default, this photo will be sent by the user with optional caption. Alternatively, you can use input_message_content to send a message with the specified content instead of the photo.

    Поле Тип Описание
    type String Type of the result, must be photo
    id String Unique identifier for this result, 1-64 bytes
    photo_url String A valid URL of the photo. Photo must be in jpeg format. Photo size must not exceed 5MB
    thumb_url String URL of the thumbnail for the photo
    photo_width Integer Опционально. Width of the photo
    photo_height Integer Опционально. Height of the photo
    title String Опционально. Title for the result
    description String Опционально. Short description of the result
    caption String Опционально. Caption of the photo to be sent, 0-200 characters
    reply_markup InlineKeyboardMarkup Опционально. Inline keyboard attached to the message
    input_message_content InputMessageContent Опционально. Content of the message to be sent instead of the photo

    Represents a link to an animated GIF file. By default, this animated GIF file will be sent by the user with optional caption. Alternatively, you can use input_message_content to send a message with the specified content instead of the animation.

    Поле Тип Описание
    type String Type of the result, must be gif
    id String Unique identifier for this result, 1-64 bytes
    gif_url String A valid URL for the GIF file. Размер файла must not exceed 1MB
    gif_width Integer Опционально. Width of the GIF
    gif_height Integer Опционально. Height of the GIF
    thumb_url String URL of the static thumbnail for the result (jpeg or gif)
    title String Опционально. Title for the result
    caption String Опционально. Caption of the GIF file to be sent, 0-200 characters
    reply_markup InlineKeyboardMarkup Опционально. Inline keyboard attached to the message
    input_message_content inputMessageContent Опционально. Content of the message to be sent instead of the GIF animation

    Represents a link to a video animation (H.264/MPEG-4 AVC video without sound). By default, this animated MPEG-4 file will be sent by the user with optional caption. Alternatively, you can use input_message_content to send a message with the specified content instead of the animation.

    Поле Тип Описание
    type String Type of the result, must be mpeg4_gif
    id String Unique identifier for this result, 1-64 bytes
    mpeg4_url String A valid URL for the MP4 file. Размер файла must not exceed 1MB
    mpeg4_width Integer Опционально. Video width
    mpeg4_height Integer Опционально. Video height
    thumb_url String URL of the static thumbnail (jpeg or gif) for the result
    title String Опционально. Title for the result
    caption String Опционально. Caption of the MPEG-4 file to be sent, 0-200 characters
    reply_markup InlineKeyboardMarkup Опционально. Inline keyboard attached to the message
    input_message_content InputMessageContent Опционально. Content of the message to be sent instead of the video animation

    Represents a link to a page containing an embedded video player or a video file. By default, this video file will be sent by the user with an optional caption. Alternatively, you can use input_message_content to send a message with the specified content instead of the video.

    Поле Тип Описание
    type String Type of the result, must be video
    id String Unique identifier for this result, 1-64 bytes
    video_url String A valid URL for the embedded video player or video file
    mime_type String Mime type of the content of video url, “text/html” or “video/mp4”
    thumb_url String URL of the thumbnail (jpeg only) for the video
    title String Title for the result
    caption String Опционально. Caption of the video to be sent, 0-200 characters
    video_width Integer Опционально. Video width
    video_height Integer Опционально. Video height
    video_duration Integer Опционально. Video duration in seconds
    description String Опционально. Short description of the result
    reply_markup InlineKeyboardMarkup Опционально. Inline keyboard attached to the message
    input_message_content InputMessageContent Опционально. Content of the message to be sent instead of the video

    Represents a link to an mp3 audio file. By default, this audio file will be sent by the user. Alternatively, you can use input_message_content to send a message with the specified content instead of the audio.

    Поле Тип Описание
    type String Type of the result, must be audio
    id String Unique identifier for this result, 1-64 bytes
    audio_url String A valid URL for the audio file
    title String Title
    caption Integer Необязательный Название аудио, 0-200 символов
    performer String Опционально. Performer
    audio_duration Integer Опционально. Audio duration in seconds
    reply_markup InlineKeyboardMarkup Опционально. Inline keyboard attached to the message
    input_message_content InputMessageContent Опционально. Content of the message to be sent instead of the audio

    Note: This will only work in Telegram versions released after 9 April, 2020. Older clients will ignore them.

    Represents a link to a voice recording in an .ogg container encoded with OPUS. By default, this voice recording will be sent by the user. Alternatively, you can use input_message_content to send a message with the specified content instead of the the voice message.

    Поле Тип Описание
    type String Type of the result, must be voice
    id String Unique identifier for this result, 1-64 bytes
    voice_url String A valid URL for the voice recording
    title String Recording title
    caption Integer Необязательный Название голосового сообщения, 0-200 символов
    voice_duration Integer Опционально. Recording duration in seconds
    reply_markup InlineKeyboardMarkup Опционально. Inline keyboard attached to the message
    input_message_content InputMessageContent Опционально. Content of the message to be sent instead of the voice recording

    Note: This will only work in Telegram versions released after 9 April, 2020. Older clients will ignore them.

    Represents a link to a file. By default, this file will be sent by the user with an optional caption. Alternatively, you can use input_message_content to send a message with the specified content instead of the file. Currently, only .PDF and .ZIP files can be sent using this method.

    Поле Тип Описание
    type String Type of the result, must be document
    id String Unique identifier for this result, 1-64 bytes
    title String Title for the result
    caption String Опционально. Caption of the document to be sent, 0-200 characters
    document_url String A valid URL for the file
    mime_type String Mime type of the content of the file, either “application/pdf” or “application/zip”
    description String Опционально. Short description of the result
    reply_markup InlineKeyboardMarkup Опционально. Inline keyboard attached to the message
    input_message_content InputMessageContent Опционально. Content of the message to be sent instead of the file
    thumb_url String Опционально. URL of the thumbnail (jpeg only) for the file
    thumb_width Integer Опционально. Thumbnail width
    thumb_height Integer Опционально. Thumbnail height

    Note: This will only work in Telegram versions released after 9 April, 2020. Older clients will ignore them.

    Represents a location on a map. By default, the location will be sent by the user. Alternatively, you can use input_message_content to send a message with the specified content instead of the location.

    Поле Тип Описание
    type String Type of the result, must be location
    id String Unique identifier for this result, 1-64 Bytes
    latitude Float number Location latitude in degrees
    longitude Float number Location longitude in degrees
    title String Location title
    reply_markup InlineKeyboardMarkup Опционально. Inline keyboard attached to the message
    input_message_content InputMessageContent Опционально. Content of the message to be sent instead of the location
    thumb_url String Опционально. Url of the thumbnail for the result
    thumb_width Integer Опционально. Thumbnail width
    thumb_height Integer Опционально. Thumbnail height

    Note: This will only work in Telegram versions released after 9 April, 2020. Older clients will ignore them.

    Represents a venue. By default, the venue will be sent by the user. Alternatively, you can use input_message_content to send a message with the specified content instead of the venue.

    Поле Тип Описание
    type String Type of the result, must be venue
    id String Unique identifier for this result, 1-64 Bytes
    latitude Float Latitude of the venue location in degrees
    longitude Float Longitude of the venue location in degrees
    title String Title of the venue
    address String Address of the venue
    foursquare_id String Опционально. Foursquare identifier of the venue if known
    reply_markup InlineKeyboardMarkup Опционально. Inline keyboard attached to the message
    input_message_content InputMessageContent Опционально. Content of the message to be sent instead of the venue
    thumb_url String Опционально. Url of the thumbnail for the result
    thumb_width Integer Опционально. Thumbnail width
    thumb_height Integer Опционально. Thumbnail height

    Note: This will only work in Telegram versions released after 9 April, 2020. Older clients will ignore them.

    Represents a contact with a phone number. By default, this contact will be sent by the user. Alternatively, you can use input_message_content to send a message with the specified content instead of the contact.

    Поле Тип Описание
    type String Type of the result, must be contact
    id String Unique identifier for this result, 1-64 Bytes
    phone_number String Contact’s phone number
    first_name String Contact’s first name
    last_name String Опционально. Contact’s last name
    reply_markup InlineKeyboardMarkup Опционально. Inline keyboard attached to the message
    input_message_content InputMessageContent Опционально. Content of the message to be sent instead of the contact
    thumb_url String Опционально. Url of the thumbnail for the result
    thumb_width Integer Опционально. Thumbnail width
    thumb_height Integer Опционально. Thumbnail height

    Note: This will only work in Telegram versions released after 9 April, 2020. Older clients will ignore them.

    Represents a link to a photo stored on the Telegram servers. By default, this photo will be sent by the user with an optional caption. Alternatively, you can use input_message_content to send a message with the specified content instead of the photo.

    Поле Тип Описание
    type String Type of the result, must be photo
    id String Unique identifier for this result, 1-64 bytes
    photo_file_id String A valid file identifier of the photo
    title String Опционально. Title for the result
    description String Опционально. Short description of the result
    caption String Опционально. Caption of the photo to be sent, 0-200 characters
    reply_markup InlineKeyboardMarkup Опционально. Inline keyboard attached to the message
    input_message_content InputMessageContent Опционально. Content of the message to be sent instead of the photo

    Represents a link to an animated GIF file stored on the Telegram servers. By default, this animated GIF file will be sent by the user with an optional caption. Alternatively, you can use input_message_content to send a message with specified content instead of the animation.

    Поле Тип Описание
    type String Type of the result, must be gif
    id String Unique identifier for this result, 1-64 bytes
    gif_file_id String A valid file identifier for the GIF file
    title String Опционально. Title for the result
    caption String Опционально. Caption of the GIF file to be sent, 0-200 characters
    reply_markup InlineKeyboardMarkup Опционально. An Inline keyboard attached to the message
    input_message_content InputMessageContent Опционально. Content of the message to be sent instead of the GIF animation

    Represents a link to a video animation (H.264/MPEG-4 AVC video without sound) stored on the Telegram servers. By default, this animated MPEG-4 file will be sent by the user with an optional caption. Alternatively, you can use input_message_content to send a message with the specified content instead of the animation.

    Поле Тип Описание
    type String Type of the result, must be mpeg4_gif
    id String Unique identifier for this result, 1-64 bytes
    mpeg4_file_id String A valid file identifier for the MP4 file
    title String Опционально. Title for the result
    caption String Опционально. Caption of the MPEG-4 file to be sent, 0-200 characters
    reply_markup InlineKeyboardMarkup Опционально. An Inline keyboard attached to the message
    input_message_content InputMessageContent Опционально. Content of the message to be sent instead of the video animation

    Represents a link to a sticker stored on the Telegram servers. By default, this sticker will be sent by the user. Alternatively, you can use input_message_content to send a message with the specified content instead of the sticker.

    Поле Тип Описание
    type String Type of the result, must be sticker
    id String Unique identifier for this result, 1-64 bytes
    sticker_file_id String A valid file identifier of the sticker
    reply_markup InlineKeyboardMarkup Опционально. An Inline keyboard attached to the message
    input_message_content InputMessageContent Опционально. Content of the message to be sent instead of the sticker

    Note: This will only work in Telegram versions released after 9 April, 2020. Older clients will ignore them.

    Represents a link to a file stored on the Telegram servers. By default, this file will be sent by the user with an optional caption. Alternatively, you can use input_message_content to send a message with the specified content instead of the file. Currently, only pdf-files and zip archives can be sent using this method.

    Поле Тип Описание
    type String Type of the result, must be document
    id String Unique identifier for this result, 1-64 bytes
    title String Title for the result
    document_file_id String A valid file identifier for the file
    description String Опционально. Short description of the result
    caption String Опционально. Caption of the document to be sent, 0-200 characters
    reply_markup InlineKeyboardMarkup Опционально. An Inline keyboard attached to the message
    input_message_content InputMessageContent Опционально. Content of the message to be sent instead of the file

    Note: This will only work in Telegram versions released after 9 April, 2020. Older clients will ignore them.

    Represents a link to a video file stored on the Telegram servers. By default, this video file will be sent by the user with an optional caption. Alternatively, you can use input_message_content to send a message with the specified content instead of the video.

    Поле Тип Описание
    type String Type of the result, must be video
    id String Unique identifier for this result, 1-64 bytes
    video_file_id String A valid file identifier for the video file
    title String Title for the result
    description String Опционально. Short description of the result
    caption String Опционально. Caption of the video to be sent, 0-200 characters
    reply_markup InlineKeyboardMarkup Опционально. An Inline keyboard attached to the message
    input_message_content InputMessageContent Опционально. Content of the message to be sent instead of the video

    Represents a link to a voice message stored on the Telegram servers. By default, this voice message will be sent by the user. Alternatively, you can use input_message_content to send a message with the specified content instead of the voice message.

    Поле Тип Описание
    type String Type of the result, must be voice
    id String Unique identifier for this result, 1-64 bytes
    voice_file_id String A valid file identifier for the voice message
    title String Voice message title
    caption Integer Необязательный Название аудиосообщения, 0-200 символов
    reply_markup InlineKeyboardMarkup Опционально. An Inline keyboard attached to the message
    input_message_content InputMessageContent Опционально. Content of the message to be sent instead of the voice message

    Note: This will only work in Telegram versions released after 9 April, 2020. Older clients will ignore them.

    Represents a link to an mp3 audio file stored on the Telegram servers. By default, this audio file will be sent by the user. Alternatively, you can use input_message_content to send a message with the specified content instead of the audio.

    Поле Тип Описание
    type String Type of the result, must be audio
    id String Unique identifier for this result, 1-64 bytes
    caption Integer Необязательный Название аудио, 0-200 символов
    audio_file_id String A valid file identifier for the audio file
    reply_markup InlineKeyboardMarkup Опционально. An Inline keyboard attached to the message
    input_message_content InputMessageContent Опционально. Content of the message to be sent instead of the audio

    Note: This will only work in Telegram versions released after 9 April, 2020. Older clients will ignore them.

    This object represents the content of a message to be sent as a result of an inline query. Telegram clients currently support the following 4 types:

    Represents the content of a text message to be sent as the result of an inline query.

    Поле Тип Описание
    message_text String Text of the message to be sent, 1-4096 characters
    parse_mode String Опционально. Send Markdown or HTML, if you want Telegram apps to show bold, italic, fixed-width text or inline URLs in your bot’s message.
    disable_web_page_preview Boolean Опционально. Disables link previews for links in the sent message

    Represents the content of a location message to be sent as the result of an inline query.

    Поле Тип Описание
    latitude Float Latitude of the location in degrees
    longitude Float Longitude of the location in degrees

    Note: This will only work in Telegram versions released after 9 April, 2020. Older clients will ignore them.

    Represents the content of a venue message to be sent as the result of an inline query.

    Поле Тип Описание
    latitude Float Latitude of the venue in degrees
    longitude Float Longitude of the venue in degrees
    title String Name of the venue
    address String Address of the venue
    foursquare_id String Опционально. Foursquare identifier of the venue, if known

    Note: This will only work in Telegram versions released after 9 April, 2020. Older clients will ignore them.

    Represents the content of a contact message to be sent as the result of an inline query.

    Поле Тип Описание
    phone_number String Contact’s phone number
    first_name String Contact’s first name
    last_name String Опционально. Contact’s last name

    Note: This will only work in Telegram versions released after 9 April, 2020. Older clients will ignore them.

    Represents a result of an inline query that was chosen by the user and sent to their chat partner.

    Поле Тип Описание
    result_id String The unique identifier for the result that was chosen
    from User The user that chose the result
    location Location Опционально. Sender location, only for bots that require user location
    inline_message_id String Опционально. Identifier of the sent inline message. Available only if there is an inline keyboard attached to the message. Will be also received in callback queries and can be used to edit the message.
    query String The query that was used to obtain the result

    Боты теперь умеют предоставлять пользователям возможность поиграть в HTML5-игры. Создать игру можно при помощи бота @BotFather и команды /newgame. Обратите внимание, что для создания игры вам нужно принять соглашение.

    • Игры — новый тип контента, представленный объектами Game и InlineQueryResultGame.
    • Как только вы создали игру с помощью бота BotFather, вы сможее отправлять игры в чаты или при помощи метода sendGame, или используя встроенный режим с методом InlineQueryResultGame.
    • Если вы отправите сообщение с игрой без каких-либо кнопок, к нему автоматически добавится кнопка ‘Играть в ИмяИгры‘. Когда кто-то нажмёт на эту кнопку, вашему боту придёт CallbackQuery с параметром game_short_name. После этого вы должны предоставить корректный URL страницы с игрой, который автоматически откроется во встроенном браузере у пользователя.
    • Вы можете сами добавить сколько угодно кнопок к сообщению с игрой. Пожалуйста, обратите внимание, что первая кнопка в первом ряду всегда должна открывать игру. Для этого существует поле callback_game в объекте InlineKeyboardButton. Остальные кнопки могут быть какими угодно: ссылки на сайт игры, вызов правил, и т. д.
    • Чтобы описание игры выглядело более привлекательно, вы можете загрузить GIF-анимацию с геймплеем игры. Сделать это можно при помощи бота BotFather (пример такой игры: Lumberjack).
    • В сообщении с игрой также будет отображаться таблица рекордов для текущего чата. Чтобы отображать рекорды в чате с игрой, вы можете использовать метод setGameScore. Добавьте параметр edit_message, чтобы автоматически обновлять сообщение с таблицей рекордов.
    • Чтобы отобразить таблицу рекордов прямо в вашем приложении, используйте метод getGameHighScores.
    • Вы можете добавить кнопки «Поделиться», которые позволят пользователям отправлять свои результаты в чаты или группы.

    Этот метод используется для отправки игры в виде обычного сообщения. В случае успеха возвращает объект с отправленным сообщением Message.

    Параметры Тип Обязательный? Описание
    chat_id Integer или String Да Уникальный идентификатор целевого чата или юзернейм целевого канала (в формате @channelusername )
    game_short_name String Да Короткое название игры, служит уникальным идентификатором игры. Задаётся в Botfather.
    disable_notification Boolean Optional Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound.
    reply_to_message_id Integer Нет Если сообщение является ответом, ID оригинального сообщения
    reply_markup InlineKeyboardMarkup или ReplyKeyboardMarkup или ReplyKeyboardHide или ForceReply Нет Дополнительные параметры интерфейса. Сериализованные в JSON встроенные клавиатуры, обычные клавиатуры, инструкция скрыть клавиатуру или принудительного ответа.

    Этот объект представляет собой игру.

    Поле Тип Описание
    title String Название игры
    description String Описание игры
    photo Массив объектов PhotoSize Изображение, которое будет показываться в качестве обложки игры.
    text String Опционально. Краткое описание игры или таблицы рекордов в сообщении с игрой. Может быть автоматически отредактировано, чтобы показывать текущую таблицу рекордов для игры при вызове ботом метода setGameScore, или ручном редактировании методом editMessageText. 0-4096 символов.
    text_entities Массив объектов MessageEntity Опционально. Сущности в сообщении, типа имён пользователей, ссылок, команд и т. д.
    animation Animation Опционально. Анимация, которая будет показана в опиании игры в сообщении.

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

    Поле Тип Описание
    file_id String Уникальный идентификатор файла
    thumb PhotoSize Опционально. Превью анимации, заданное отправителем
    file_name String Опционально. Название файла анимации, заданное отправителем
    mime_type String Опционально. MIME-тип файла анимации, заданное отправителем
    file_size Integer Опционально. Размер файла/td>

    Заглушка, пока не содержит никакой информации.

    Используйте этот метод, чтобы обновить игровой счёт определённого пользователя. Если сообщение было отправлено ботом, вернёт отредактированное сообщение Message, иначе True. Вернёт ошибку, если вы попытаетесь установить новый счёт меньше, чем текущий.

    Параметры Тип Обязательный? Описание
    user_id Integer Да Идентификатор пользователя
    score Integer Да Новый счёт, больше нуля
    chat_id Integer или String Нет Необходим, если не указан inline_message_id. Уникальный идентификатор чата или имя пользователя канала (в формате @channelusername ).
    message_id Integer Нет Необходим, если не указан inline_message_id. Уникальный идентификатор отправленного сообщения
    inline_message_id String Нет Необходим, если не указан chat_id или inline_message_id. Идентификатор встроенного сообщения
    edit_message Boolean Нет Передайте True, чтобы в сообщение была автоматически встроена таблица рекордов

    Используйте этот метод, чтобы получить данные для таблицы рекордов. Этот метод возвращает счёт указанного пользователя и нескольких его соседей по таблице. В случает успеха вернёт массив объектов GameHighScore.

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

    Параметры Тип Обязательный? Описание
    user_id Integer Да Идентификатор пользователя
    chat_id Integer или String Нет Необходим, если не указан inline_message_id. Уникальный идентификатор чата или имя пользователя канала (в формате @channelusername ).
    message_id Integer Нет Необходим, если не указан inline_message_id. Уникальный идентификатор отправленного сообщения
    inline_message_id String Нет Необходим, если не указан chat_id или inline_message_id. Идентификатор встроенного сообщения

    Этот объект представляет собой один из рядов таблицы рекордов игры.

    Поле Тип Описание
    position Integer Место в таблице результатов
    user User Пользователь
    score Integer Счёт

    Сайт про Telegram на русском (неофициальный).

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

    Hyperwave API Функции

    Integration with Apache

    The integration with Apache and possible other servers is already described in the Hyperwave module which has been the first extension to connect a Hyperwave Server.

    > The API prov > HW_API
  • HW_API_Object
  • HW_API_Attribute
  • HW_API_Error
  • HW_API_Content
  • HW_API_Reason
  • Some basic >HW_API_String, HW_API_String_Array, etc., which exist in the Hyperwave SDK have not been implemented since PHP has powerful replacements for them.

    Each > objectIdentifier The name or id of an object, e.g. «rootcollection», «0x873A8768 0x00000002».

  • parentIdentifier The name or id of an object which is considered to be a parent.
  • object An instance of class HW_API_Object.
  • parameters An instance of class HW_API_Object.
  • version The version of an object.
  • mode An integer value determine the way an operation is executed.
  • attributeSelector Any array of strings, each containing a name of an attribute. This is used if you retrieve the object record and want to include certain attributes.
  • objectQuery A query to select certain object out of a list of objects. This is used to reduce the number of objects which was delivered by a function like hw_api->children() or hw_api->find() .
  • Methods returning boolean can return TRUE, FALSE or HW_API_Error object.

    Илон Маск рекомендует:  Что такое код func_get_args
    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL