Как удалить маршруты и конечные точки WordPress REST API по умолчанию
Опубликовано: 2018-07-31WordPress REST API был введен в ядро в версии 4.7 (Vaughan) в декабре 2016 года. Как и любое другое существенное изменение, внесенное в ядро WP, оно вызвало ожесточенные споры (на данный момент, июль 2018 года, Гутенберг является предметом таких споров). полемика). В итоге ничего не произошло. Тем, кто не заботился о REST API, до сих пор все равно. Те, кому не все равно, сделали несколько приложений, интеграций, плагинов и других крутых проектов.
Когда #wordpress REST API был объединен с ядром версии 4.7, люди были в шоке! Так же, как они сходят с ума, когда происходят какие-либо изменения. В итоге все получается просто отлично.
НАЖМИТЕ, ЧТОБЫ НАПИСАТЬА пока мы в теме крутых проектов. Знаете ли вы, что самые успешные из них начинаются со страницы, которая скоро появится? И во многих случаях это страница «Скоро появится», созданная с помощью плагина Coming Soon & Maintenance Mode.
Этот плагин поставляется с конструктором перетаскивания, более чем 170 темами, лучшей в своем классе настройкой SEO, автоответчиком и службами электронной почты, а также многими другими функциями, которые позволят вам создать идеальную страницу в ближайшее время за считанные минуты. И вдобавок ко всему этому, плагин интегрирован с Depositphotos, что означает, что вы можете найти лучшие визуальные эффекты прямо из плагина. Но если вы не являетесь поклонником коллекций Depositphotos, Yay Images также является отличным источником стокового контента.
Но хватит об этом, давайте вернемся к нашей основной теме, REST API.
Мы заботимся о REST API и используем его при создании SaaS на базе WP. Он стабилен, быстр, с ним легко работать, он хорошо вписывается в WP и в большинстве случаев хорошо документирован. Если вы не знаете, что такое REST API, этот пост, вероятно, не для вас, но узнайте, что такое REST API (видео и текст), и, возможно, вы будете использовать его в своем следующем проекте.
Маршрут? Конечная точка? Разве это не все равно?
Нет, это не то же самое. Для большинства людей разница незаметна, и они используют термины «маршрут» и «конечная точка» взаимозаменяемо, но это не так сложно. Маршрут - это более или менее URL. Это «имя», используемое для доступа к конечной точке. На одном маршруте у вас может быть несколько конечных точек, потому что используемая вами конечная точка зависит от используемого вами типа HTTP-запроса. GET
, POST
, PUT
или DELETE
могут и обычно служат разным целям. При доступе к yoursite.com/wp-json/v2/posts/1 через GET
вы получите подробную информацию о сообщении с идентификатором № 1. Использование DELETE
на том же маршруте вызовет другую конечную точку (или функцию, если хотите), которая удалит это сообщение. В официальном руководстве по REST API есть больше информации по этому вопросу, так что погрузитесь в подробности.
Маршруты и конечные точки REST API #wordpress — это не одно и то же! Маршрут — это «имя», используемое для доступа к конечной точке. Один маршрут обычно связан с несколькими конечными точками.
НАЖМИТЕ, ЧТОБЫ НАПИСАТЬЗачем мне удалять конечные точки или маршруты WP REST API по умолчанию?
Как мы обсуждали в статье об удалении правил перезаписи по умолчанию — есть сотни причин, по которым разработчик WordPress может это сделать.
«Это сделает WordPress быстрее, потому что ему не нужно анализировать все эти конечные точки». это все еще то, с чем я не согласен, и считаю, что выигрыш будет меньше миллисекунды, но это не повредит.
Вам нравится держать вещи в чистоте, и, поскольку вы не используете REST API, зачем нужны маршруты API? Конечно, имеет смысл. Но в этом случае используйте плагин, чтобы полностью отключить REST API.
И еще есть причина, по которой мы отключаем маршруты по умолчанию (и конечные точки). Мы активно используем настраиваемые конечные точки REST API, но нам не нужны стандартные. Следовательно, приятно держать вещи постными и чистыми. Это также не может повредить безопасности, поскольку мы подвергаем меньшему количеству фрагментов данных суровый внешний мир.
Покажите мне конечные точки API по умолчанию
Справочник по конечной точке доступен в руководстве REST API. Более или менее любая общедоступная часть данных также будет доступна через REST API. Пример запроса на demo.wp-api.org/wp-json/wp/v2/posts покажет десять сообщений в формате JSON. Если вам нужна удобочитаемая версия этого ответа, вам необходимо расшифровать ответ JSON. То же самое касается страниц, категорий и других структур данных. Структура данных и конечные точки очень похожи, как вы можете видеть, просматривая ссылку.
Другой способ увидеть маршруты по умолчанию — добавить этот код в файл functions.php
вашей темы, а затем открыть yoursite.com/wp-json/. Включите красивые ссылки, если вы еще этого не сделали.
add_filter( 'rest_endpoints', 'show_default_endpoints' ); function show_default_endpoints( $endpoints ) { var_export( array_keys( $endpoints ) ); die; }
Он показывает 31 конечную точку REST по умолчанию. Это число, конечно, может измениться по мере добавления новых основных функций. И все будет по-другому, если у вас есть какие-либо плагины, которые добавляют пользовательские конечные точки.
Удаление конечных точек по умолчанию
Приведенный выше код требует минимальных изменений. Возвратите пустой массив, и все конечные точки исчезнут.
add_filter( 'rest_endpoints', 'remove_default_endpoints' ); function remove_default_endpoints( $endpoints ) { return array( ); }
«Все конечные точки» также включают ваши пользовательские конечные точки, поэтому не стоит их удалять. Вот простой способ поддерживать их активность:
add_filter( 'rest_endpoints', 'remove_default_endpoints_smarter' ); function remove_default_endpoints_smarter( $endpoints ) { $prefix = 'your_custom_endpoint_prefix'; foreach ( $endpoints as $endpoint => $details ) { if ( !fnmatch( '/' . $prefix . '/*', $endpoint, FNM_CASEFOLD ) ) { unset( $endpoints[$endpoint] ); } } return $endpoints; }
Просто пропустите конечные точки с вашим пользовательским префиксом и оставьте их в массиве. Не забудьте вернуть массив.
Настройка префикса URL-адреса REST
Пользовательские конечные точки, несмотря на то, что они являются пользовательскими, используют тот же префикс, что и конечные точки по умолчанию. Они выглядят так: mysite.com/wp-json/custom-endpoint/. Может быть, вы находите это уродливым или вам не нравятся стандартные вещи. Его изменение — это вопрос одной строки кода. В целях тестирования поместите приведенный ниже код в файл functions.php
темы и после сохранения откройте Dashboard — Settings — Permalinks, чтобы сбросить правила перезаписи.
add_filter( 'rest_url_prefix', 'rest_url_prefix' ); function rest_url_prefix( ) { return 'api'; }
С фильтром над вашими конечными точками будет mysite.com/api/custom-endpoint/, а открытие старого URL-адреса mysite.com/wp-json/custom-endpoint/ приведет к ошибке 404.
Убедитесь, что вы включили номер версии в свои пользовательские конечные точки, поскольку префикс не добавляется автоматически WP. Префикс номера версии гарантирует, что последующие изменения не нарушат работу клиентов, использующих старые конечные точки. Просто включите префикс версии при вызове register_rest_route()
, чтобы получить что-то вроде mysite.com/api/v1/custom-endpoint/ и сохраните все свои конечные точки за этой «v1», чтобы позже вы могли использовать «v2» и т. д.
Проверьте свои изменения
Удаление или изменение маршрутов и конечных точек REST API не будет иметь никакого значения на 98% сайтов WP. "Почему?" – Потому что они вообще не используют REST API. Но если у вас есть, убедитесь, что вы протестировали подключенные приложения, потому что, как и во всем, изменения могут сломать что-то. И лучше обнаружить ошибку сегодня, чем завтра.