Ошибка проверки доступности endpoint url провайдера

Обновлено: 05.07.2024

Этот раздел содержит сведения об устранении типичных проблем, возникающих при настройке экземпляров сервера для Группы доступности AlwaysOn. Примеры типичных проблем настройки: Группы доступности AlwaysOn отключен, учетные записи настроены неправильно, конечная точка зеркального отображения баз данных не существует, конечная точка недоступна (ошибка SQL Server 1418), отсутствует сетевой доступ, команда присоединения базы данных завершается с ошибкой (ошибка SQL Server 35250).

Проверьте, выполняются ли предварительные требования Группы доступности AlwaysOn . Дополнительные сведения см. в разделе Предварительные требования, ограничения и рекомендации для групп доступности AlwaysOn (SQL Server).

В этом разделе:

Функция групп доступности AlwaysOn не включена

Функция Группы доступности AlwaysOn должна быть включена на каждом из экземпляров SQL Server. Дополнительные сведения см. в разделе Включение и отключение групп доступности AlwaysOn (SQL Server).

Измерение счетов

Учетные записи, под которыми работает SQL Server , должны быть правильно настроены.

Имеют ли учетные записи нужные разрешения?

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

Если два экземпляра сервера выполняются под разными учетными записями, то каждая учетная запись должна быть создана в базе данных master на удаленном экземпляре сервера, а их именам входа необходимо присвоить разрешения CONNECT для подключения к конечной точке зеркального отображения базы данных на этом экземпляре сервера. Дополнительные сведения см. в статье Создание учетных записей для зеркального отображения баз данных или групп доступности AlwaysOn (SQL Server). Чтобы проверить наличие у имен входа разрешений CONNECT, можно использовать следующий запрос для каждого экземпляра:

Если SQL Server выполняется под встроенной учетной записью, например под учетной записью локальной системы, локальной службы, сетевой службы или под учетной записью, не относящейся к домену, для проверки подлинности конечных точек следует использовать сертификаты. Если учетные записи служб используют учетные записи доменов в одном домене, вы можете предоставить доступ CONNECT для каждой учетной записи службы на всех расположениях реплики либо воспользоваться сертификатами. Дополнительные сведения см. в разделе Использование сертификатов для конечной точки зеркального отображения базы данных (Transact-SQL).

Конечные точки

Конечные точки должны быть правильно настроены.

Убедитесь, что каждый экземпляр SQL Server , на котором планируется размещать реплику доступности (каждое расположение реплики), имеет конечную точку зеркального отображения баз данных. Чтобы определить, существует ли конечная точка зеркального отображения баз данных на конкретном экземпляре сервера, воспользуйтесь представлением каталога sys.database_mirroring_endpoints.

Убедитесь, что номера портов правильны.

Чтобы определить, какой порт в текущий момент связан с конечной точкой зеркального отображения базы данных экземпляра сервера, воспользуйтесь следующей инструкцией Transact-SQL :

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

Убедитесь, что конечные точки запущены (STATE=STARTED). На каждом экземпляре сервера выполните следующую инструкцию Transact-SQL:

Дополнительные сведения о столбце state_desc см. в разделе sys.database_mirroring_endpoints (Transact-SQL).

Чтобы запустить конечную точку, выполните следующую инструкцию Transact-SQL:

Дополнительные сведения см. в статье ALTER ENDPOINT (Transact-SQL).

Убедитесь, что имени входа на другом сервере предоставлено разрешение CONNECT. Чтобы узнать, кто имеет разрешение CONNECT для конечной точки, выполните следующую инструкцию Transact-SQL на каждом экземпляре сервера:

Убедитесь, что в URL-адресе конечной точки имя сервера указано правильно.

В URL-адресе конечной точки рекомендуется указывать полное доменное имя (FQDN) сервера. При этом можно использовать любое уникальное имя, идентифицирующее компьютер. Адрес сервера может быть NetBIOS-именем (если системы находятся в одном домене), полным доменным именем или IP-адресом (желательно статическим). Рекомендуется использовать полное доменное имя.

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

Затем сравните полученное значение endpoint_url с именем сервера (NetBIOS или FQDN). Чтобы запросить NetBIOS-имя и полное доменное имя, в командной строке выполните локально следующую команду для реплики:

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

Network Access

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

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

If the Endpoint is listening and connection is successful, then you will see a blank screen. If not, you will receive a connection error from Telnet

If Telnet connection to the IP address works but to the ServerName it does not, there is likely a DNS or name resolution issue

If connection works by ServerName and not by IP address, then there could be more than one endpoint defined on that server (another SQL instance perhaps) that is listening on that port. Though the status of the endpoint on the instance in question shows "STARTED" another instance may actually have the port binding and prevent the correct instance from listening and establishing TCP connections.

If Telnet fails to connect, look for Firewall and/or Anti-virus software that may be blocking the endpoint port in question. Check the firewall setting to see if it allows the endpoint port communication between the server instances that host primary replica and the secondary replica (port 5022 by default). Run the following PowerShell script to examine for disabled inbound traffic rules

If Telnet fails to connect, look for Firewall and/or antivirus software that may be blocking the endpoint port in question. If you are running SQL Server on Azure VM, additionally you would need to ensure Network Security Group (NSG) allows the traffic to endpoint port. Check the firewall (and NSG, for Azure VM) setting to see if it allows the endpoint port communication between the server instances that host primary replica and the secondary replica (port 5022 by default)

Capture a NETSTAT -a output and verify the status is a LISTENING or ESTABLISHED on the IP:Port for the endpoint specified

Endpoint Access (SQL Server Error 1418)

This SQL Server message indicates that the server network address specified in the endpoint URL cannot be reached or does not exist, and it suggests that you verify the network address name and reissue the command.

Join Database Fails (SQL Server Error 35250)

This section discusses the possible causes and resolution of a failure to join secondary databases to the availability group because the connection to the primary replica is not active. This is the full error message:

Msg 35250 The connection to the primary replica is not active. The command cannot be processed.

Resolution:

Summary of steps is outlined below.

For detailed step-by-step instructions, please refer to Engine error MSSQLSERVER_35250

  1. Ensure the endpoint is created and started.
  2. Check if you can connect to the endpoint via Telnet and ensure no firewall rules are blocking connectivity
  3. Check for errors in the system. You can query the sys.dm_hadr_availability_replica_states for the last_connect_error_number that may help you diagnose the join issue.
  4. Ensure the endpoint is defined so it correctly matches the IP/port that AG is using.
  5. Check whether the network service account has CONNECT permission to the endpoint.
  6. Check for possible name resolution issues
  7. Ensure your SQL Server is running a recent build (preferably the latest build to protect from running into fixed issues.

Read-Only Routing is Not Working Correctly

Ensure that you have set up read-only routing by following Configure read-only routing document.

Ensure Client Driver Support

The client application must use a client providers that support ApplicationIntent parameter. See Driver and client connectivity support for availability groups

If you are connecting to a distributed network name (DNN) Listener, the provider must also support MultiSubnetFailover parameter

Ensure connection string properties are set correctly

For read-only routing to work properly, your client application must use these properties in the connection string:

  • A database name that belongs to the AG
  • An availability group listener name
    • If you are using DNN, you must specify DNN listener name and DNN port number <DNN name,DNN port>

    Examples

    Если вы используете программы командной строки, такие как SQLCMD, убедитесь, что для имени сервера указаны правильные параметры. Например, в SQLCMD необходимо использовать параметр -S в верхнем регистре, который определяет имя сервера, а не параметр -s в нижнем регистре, который используется для разделителя столбцов.
    Например, sqlcmd -S AG_Listener,port -E -d AgDb1 -K ReadOnly -M .

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

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

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

    Чтобы просмотреть свойства каждой реплики, выполните этот запрос и проверьте значение URL-адреса конечной точки подключения реплики только для чтения.

    Чтобы просмотреть список маршрутизации только для чтения и сравнить с URL-адресом конечной точки:

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

    Убедитесь, что открыт порт READ_ONLY_ROUTING_URL. Убедитесь, что брандмауэр Windows не блокирует порт READ_ONLY_ROUTING_URL. В брандмауэре Windows настройте доступ к ядру СУБД для всех реплик в списке read_only_routing_list и всех клиентов, которые будут подключаться к этим репликам.

    Если вы используете SQL Server на виртуальной машине Azure, потребуются дополнительные действия по настройке. Убедитесь, что группа безопасности сети (NSG) для виртуальных машин каждой реплики разрешает трафик на порт конечной точки и на порт DNN, если вы используете прослушиватель DNN. Если используется прослушиватель VNN, проверьте правильность настройки подсистемы балансировки нагрузки.

    Убедитесь, что параметр READ_ONLY_ROUTING_URL (TCP://system-address:port) содержит правильное полное доменное имя (FQDN) и номер порта. Пример

    Убедитесь в правильности сетевой конфигурации SQL Server в SQL Server Configuration Manager.

    Для каждой реплики в списке read_only_routing_list должно выполняться следующее:

    • включено удаленное подключение к SQL Server;
    • включен протокол TCP/IP;
    • правильно настроены IP-адреса.

    Вы можете быстро проверить правильность настройки, если вы можете подключиться с удаленного компьютера к целевому имени экземпляра вторичной реплики SQL Server с использованием синтаксиса TCP:SQL_Instance .


    /config/custom_components/ в зависимости от места и версии HA).

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


    Я в Хассио в конфигураторе в web загружал каждый из 10 файлов с указанного выше гита по одному.

    Но вы можете подключиться к малине по ssh, перейти в папку с конфигом вашей ХА сборки, перейти в папку custom_components (если ее нет - надо создать). И там сделать следующее:

    Далее прописываем в configuration.yaml этот самый компонент:

    • как я, просто добавляем в конце файла "yandex_smart_home:" (без кавычек, конечно);
    • или же "курим" расширенный мануал от создателя компонента этого: ReadMe.

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

    После этого уже переходим на сам процесс подключения всего, что сделали, в Умный дом Яндекса:



    • Название - указывем любое вам понравившееся, которое не будет занято.
    • В пункте Endpoint URL пишем https://[внешний_адрес_HA:порт]/api/yandex_smart_home.
    • Включаем приватность "Не показывать в каталоге".
    • Имя разработчика - пишем свой ник или что душе угодно. Ни на что не влияет.

    Нужно также выбрать иконку размером 224х224, которую можете сделать сами или использовать уже выбранную мной для HA:



    Сохраняем связку, и выбираем её на страничке из списка, где мы настраивали сам навык ранее.


    После, справа жмем кнопку "На модерацию" (она проходит мгновенно, так как мы выбрали ранее "приватный навык") и "Опубликовать".

    По сути все: осталось в приложении Яндекс на Android/iOS или на ПК в браузере добавить нашего нового "производителя". Покажу на примере мобильного приложения.


    Открываем левое меню в приложении Яндекс и выбираем пункт Устройства.


    Здесь открывается список с устройствами, которые можно подключить. Нам нужен пункт Умный дом.


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


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


    Откроется страничка созданного навыка - его описание. Нажимаем на "Объединить аккаунты", нас перебрасывает на страницу входа в Home Assistant: вводим логин\пароль от своего аккаунта там.


    Нас возвращает после этого на страничку самого "навыка", где уже нажимаем на "Обновить список устройств". Немного ждем..

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

    На данный момент поддерживаются только вот эти domains в HA:

    • group (on/off)
    • input_boolean (on/off)
    • switch (on/off)
    • fan (on/off)
    • light (on/off)
    • cover (on/off)
    • media_player (on/off, mute/unmute)

    В дальнейшем будет также добавлена возможность проброса из Home Assistant в Яндекс:

    • поддержка громкости в media_player;
    • яркость/цвет ламп;
    • скорость увлажнителя/вентилятора.


    На этом все, мы вместе смогли подключить те устройства, которые "нативно" не поддерживаются пока в Умном Доме Яндекс.
    Кроме того, это позволяет избежать возможных лагов из-за cloud-2-cloud системы, когда Яндекс обращается в облако производителя, который обращается в облако подключенного к нему производителя, который. - и все они лагают =)
    Остаются, по сути, только Ваш сервер, за который Вы и в ответе, и облако самого Яндекса, куда все и интегрируется.

    Текст составлен с неоценимой помощью @OXOTH1K , а также всего сообщества, которые и двигают весь прогресс на основе "ступенек" от компаний, подобных Яндексу.


    Хочешь умный дом но нет времени разбираться?
    Посмотри примеры работ и выбери себе интегратора.

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

    Есть кто уже настроил? Я столкнулся с проблемой на этапе "обновления" списка устройств, яндекс сообщает что "что-то пошло не так".

    Та же ерунда. При обновлении пишет "internal server error". ил это на яндексе беда какая-то.

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

    Не одскажете на какой версии ХА должен работать этот кастомный компонент?

    после переноса файлов с гитхаба в папку yandex_smart_home в custom_components и добавления нескольких строк в конфиг у меня в ХА версии 0.92.2 в докере на synology даже проверка конфигурации не проходит :( . причем веб морда ХА зависает на этом и приходится перегружать контейнер средствами докера. Если же пробовать запустить, то получаю в логе следующую ошибку (про атрибут медиа плеера):

    2019-05-30 00:26:05 ERROR (MainThread) [homeassistant.setup] Error during setup of component cloud

    Traceback (most recent call last):

    File "/usr/src/app/homeassistant/__main__.py", line 283, in setup_and_run_hass

    File "/usr/src/app/homeassistant/bootstrap.py", line 180, in async_from_config_file

    config_dict, hass, enable_log=False, skip_pip=skip_pip)

    File "/usr/src/app/homeassistant/bootstrap.py", line 91, in async_from_config_dict

    await _async_set_up_integrations(hass, config)

    File "/usr/src/app/homeassistant/bootstrap.py", line 394, in _async_set_up_integrations

    for domain in domains_to_load

    File "/usr/src/app/homeassistant/setup.py", line 50, in async_setup_component

    File "/usr/src/app/homeassistant/setup.py", line 126, in _async_setup_component

    hass, config, integration)

    File "/usr/src/app/homeassistant/config.py", line 756, in async_process_component_config

    File "/usr/src/app/homeassistant/loader.py", line 130, in get_component

    File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module

    return _bootstrap._gcd_import(name[level:], package, level)

    File "<frozen importlib._bootstrap>", line 1006, in _gcd_import

    File "<frozen importlib._bootstrap>", line 983, in _find_and_load

    File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked

    File "<frozen importlib._bootstrap>", line 677, in _load_unlocked

    File "<frozen importlib._bootstrap_external>", line 728, in exec_module

    File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed

    File "/config/custom_components/yandex_smart_home/__init__.py", line 12, in <module>

    from .const import (

    File "/config/custom_components/yandex_smart_home/const.py", line 73, in <module>

    (media_player.DOMAIN, media_player.DEVICE_CLASS_TV): TYPE_MEDIA_DEVICE_TV,

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):

    File "/usr/src/app/homeassistant/setup.py", line 153, in _async_setup_component

    File "/usr/src/app/homeassistant/components/cloud/__init__.py", line 156, in async_setup

    File "/usr/src/app/homeassistant/components/cloud/prefs.py", line 25, in async_initialize

    prefs = await self._store.async_load()

    File "/usr/src/app/homeassistant/helpers/storage.py", line 81, in async_load

    return await self._load_task

    У меня 93.2 версия, последняя что доступна из вебморды, под крайней мере.

    Я когда сам разбирался, узнал что на последних версиях HA уже несколько раз менялась папка компонентов: когда-то ранее это была custom_component, и даже custom_directory

    сейчас надо размещать в <config directory>/custom_components/<component name> . Так что для моего варианта в докере config/custom_components/yandex_smart_home выглядит правильной папкой.

    Для меня гораздо актуальнее другое -- как добавить устройства от яндекса в HA? А то подарили лампочку, но что с ней пока делать -- не понятно.

    Homebridge интересно получится добавить когда-нибудь? Не хотелось бы еще и Home Assistant заводить.

    Прошу помощи. Дошел до пункта "объединить аккаунты" в приложении яндекса, перебрасывает на страницу входа в Home Assistant: логин\пароль от своего аккаунта.

    Но ругается на провайдера аутентификации.
    Выдаёт надпись красного цвета: "Error. Invalid client id or redirect uri

    Не могу зайти ни через Home assistant local, ни через Legacy API Password

    Настройка через duckdns,белый IP, так же через него проброшена GHmini и она спокойно работает. Через duckdns спокойно захожу к себе в умный дом.
    Я так понимаю что проблема в доступе именно яндекса к моему duckdns. Где это можно поглядеть или как его докинуть в доверенные источники?!

    Нашел решение. Еще раз заново создал Яндекс.Диалоги и чудесным образом всё заработало.
    Причем специально сравнил настройки старого и нового диалога в яндексе, всё было один в один. Видать при сборке диалога были глюки у яндекса, т.к. вспоминаю, что собрался он тогда не с первого раза.

    Разработчик кастомного компонента мне уточнил, что нужна версия ХА не ниже 0.93 (он добавил это в readme). После обновления моего hass удалось настроить связку с Яндексом как описано в статье.

    У меня самая последняя версия, 0.93.2
    И всё-равно не даёт пароли к учетной записи HA ввести, ругается: "Error. Invalid client id or redirect uri

    Спасибо за статью!

    Спасибо за статью, пришлось использовать приложение на телефоне, чтобы объеденить аккаунты, в браузере никак не получалось. еще б команды можно было переименовывать, например - Алиса, пусти/выпусти кота. )

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

    P.S. нашел решение с помощью других аддонов hass.io

    Sapik, такая же ерунда((( не знаю, как починить

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

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

    1000x_image.jpg?1565515336

    В описании значится так: cover (on/off = close/open), но на практике все наоборот, что бы открыть шторы или поднять жалюзи, надо просить Алису их закрыть, а для того чтобы закрыть, надо попросить ее открыть! Так только у меня или у всех?

    Как добавить компонент Яндекс.Хоум при установке хассио в докере?

    АПД: разобрался. Вроде несложно.

    Та же ситуация. Удалось ли победить?

    Да. У меня в configuration.yaml на тот момент появилось устройство с типом чайник (water_heater), после добавления которого все и перестало работать. Кастомный компонент не поддерживает этот тип устройств.
    После того как в ручную указал импортируемые типы - все заработало.

    Помогите, Алиса скучает и палчет!

    А доступ в ХА из вне настроен?

    1000x_image.jpg?1593466537

    такая же фигня вылезла, раньше всеработало

    Детали issue тут. У вас такая же ошибка в логе HASS?

    Я почти месяц мозг ломал с этой ошибкой, ни кто не мог ответить. Сегодня внезапно узнал, что яндексу просто не нравится название диалога.. Пишите всё что угодно, только не "Home Assistant" и всё что с ним связано, подозреваю что он находит уже что-то подобное и поэтому выдает ошибку..

    У меня получилось! Но всё же есть большое разочарование.

    Во-первых, Яндекс "затянул к себе" датчики температуры и влажности, а датчики давления почему-то нет (у меня все это хозяйство реализовано через Tasmota/MQTT).
    Во-вторых, оказывается хвалёная Алиса может только включать и выключать, а вот озвучить температуру (или вообще любое состоние/значение/параметр) она не может.
    В-третьих, невозможно изменить логику или синтаксис голосовых команд Алисы. Вот пример - у меня в HA настроена интеграция с сигнализацией StarLine, установленной в автомобиле. Среди прочих объектов там имеется объект, изначально называемый "security". Это - состояние охраны. В русской локализации интерфейса HA на соответствующей карточке мы имеем команду "ОТКРЫТЬ" (если машина поставлена на охрану) или "ЗАКРЫТЬ" (если машина снята с охраны). Не совсем логично, но если мы дадим этому параметру дружеское имя "Машина", то станет, в принципе, логично - "машину закрыть, машину открыть". Но вот настроить Алису так, чтобы она понимала команды "Открыть/Закрыть машину" (а вообще бы, в идеале - "Снять с охраны/Поставить на охрану") нельзя - она понимает только команды Включи/Выключи". Вот и получается, что если нужно снять машину с охраны, то Алисе нужно говорить "Включи машину", а если поставить на охрану - то "Выключи машину". Если же вместо "Машина" использовать, скажем, "Сигнализация" или "Охрана", то получится вообще абсурд - для выключения сигнализации придется говорить "Включи сигнализацию", и наоборот.

    Тестирование API изображение с сайта www.andreyolegovich.ru

    В широком смысле слова API (Application Programming Interface) это метод который приложение предоставляет внешним пользователям для коммуникации с ним. Обычно через Интернет.

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

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

    Крупные интернет-компании обычно предоставляют (платно или бесплатно) доступ к API своих сервисов.

    Одним из самых распространённых способов тестирования API является написание скриптов на Python .

    Где применяют API

    Сейчас будет несколько абстрактных примеров просто для понимания сути.

    Конкретные примеры работы с API я разбираю в учебнике

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

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

    Чтобы обойти эту проблему Вы выкладываете в публичном доступе правила, по которым вебмастера могут обращаться к vk2, чтобы получить комментарии.

    Если вам интересен реальный пример работы с API рекомендую статью Работа с API GitHub

    Endpoint

    Обычно это URL (например, название сайта) и порт. Если я хочу создать веб сервис на порту 8080 Endpoint будет выглядеть так:

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

    Как видите у моих эндпойнтов (Enpoints) различные окончания. Такое окончание в Endpoint называются Resource, а начало Base URL.

    Такое определение Endpoint и Resource используется, например, в SOAP UI для RESTful интерфейсов

    Понятие Endpoint может использоваться в более широком смысле. Можно сказать, что какой-то определённый роутер или компьютер является Endpoint. Например, в понятии Endpoint Management под Endpoint имеют в виду конечное устройство. Обычно это понятно из контекста.

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

    Термин Resource также связан с RESTful, но в более широком смысле может означать что-то другое.

    На программистском сленге Endpoint иногда называют ручкой.

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

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

    1. Какие методы можно использовать, посылая запросы на каждый Endpoint
    2. Должны ли передаваться какие-то данные
    3. Если нужно передавать данные в теле запроса, то какие
    4. Какие ответы мы ожидаем в случае успешного запроса
    5. Какие ответы мы ожидаем когда с запросом или его обработкой на сервере что-то не так

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

    Вернёмся к первому пункту списка, а именно к тому, что такое методы.

    Про их свойства можно почитать здесь.

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

    Таким образом простейший запрос состоит из метода и Enpoint

    Пример API

    Получив такой запрос сайт вернёт число велосипедистов в Хельсинки.

    Попробуйте вставить эту строку в браузер.

    Доступные города: benalmadena , cordoba , fuengirola , helsinki , malaga ,moscow, spb.

    Если хотите немного потренироваться - оцените мои практические уроки по тестированию API - «Уроки тестирование API»

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

    Тестирование API без документации

    Если Вам по какой-то причине предстоит проделать эту неблагодарную работу, определетесь, насколько всё плохо. Какая у Вас есть информация об объекте тестирования.

    Известно ли какие порты для Вас открыты? Знаете ли Вы нужные endpoints?

    Сканирование портов

    Если дело совсем труба - просканируйте порты, например, с помощью netcat. Открытые порты сохраните в файл openports.txt

    Эта операция займёт довольно много времени. Можете почитать советы по работе с Nmap и Netcat , например, следующие:

    Перебор запросов

    Для ускорения процесса напишите скрипт на Bash или Python .

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

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

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

    Инструменты для тестирования

    Существует множество инструментов для тестирования. Здесь Вы можете познакомиться с одними из самых популярных: Python и SOAP UI.

    О работе с REST API на Python вы можете прочитать в статье «REST API с Python»

    А про то как сделать своё REST API - в статье «Flask»

    Web проекты часто тестируются с применением Selenium Webdriver если Вам интересно - посмотрите статью Python + Selenium


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

    Надежный веб-сайт должен быть легкодоступен для пользователей 7 дней в неделю, поэтому его надо постоянно проверять как на предмет доступности, так и на предмет работоспособности:

    • с DNS-сервером (когда в определенные интервалы времени адрес сайта не может быть определен, хотя сам сайт физически доступен);
    • с большим временем ответа (при обновлении кэша, например, или при выполнении «тяжелых» задач на стороне сервера);
    • с плановым выполнением задач (в результате которых сайт будет не доступен только в определенные моменты времени);
    • с большим времени ожидания статических файлов (например, из-за сетевой инфраструктуры или проблем с физическим носителем);
    • с подключением к базе данных.

    Есть задача: веб-сайт/сервер/сервис должен работать непрерывно несколько дней без человеческого вмешательства. Что может пойти не так?

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

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

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

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

    Черные списки DNSBL

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

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

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

    Каждый администратор может настроить свой веб-сервер таким образом, чтобы, например, не получать письма от серверов, перечисленных в определенном списке. Это помогает бороться со спамом, распространением вредоносного ПО, DDoS-атаками и другими проблемами.

    Для проверки наличия заданного IP адреса в черных списках введите IP адрес (ваш текущий IP адрес указывается по умолчанию) и нажмите кнопку Проверить.

    Защита от DDoS-атак

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

    Планирование технических работ

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

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

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

    Мониторинг срока действия домена и SSL-сертификата

    Проверка срока действия домена

    Проверить время действия домена бесплатно можно с помощью сервиса Whois Service.

    Проверка срока действия SSL-сертификата

    Выполните следующую команду из командной строки в Linux, чтобы узнать срок действия SSL сертификата, с помощью openssl:

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

    Все эти данные могут быть извлечены из SSL сертификата сайта с помощью программы openssl из командной строки в Linux.

    Проверить кто выдал SSL сертификат:

    Проверить кому выдан SSL сертификат:

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

    Мониторинг доступности сайта

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

    Доступность сайта с помощью CURL


    Статус код ‘200 OK’ означает что запрос был успешно выполнен и сайт доступен.

    Вот еще один пример, который показывает как curl отображает разные ответы сервера:


    Также с помощью curl можно проверить доступность отдельной страницы на сайте, например:

    Доступность сайта с помощью TELNET


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


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

    Читайте также: