기본 WordPress REST API 경로 및 끝점을 제거하는 방법

게시 됨: 2018-07-31

워드프레스 REST API는 2016년 12월 버전 4.7(Vaughan)의 코어에 도입되었습니다. WP 코어의 다른 중요한 변경 사항과 마찬가지로 치열한 논쟁이 있었습니다(현재 2018년 7월 구텐베르그가 그러한 논쟁의 주제입니다/ 논쟁). 결국 아무 일도 일어나지 않았습니다. REST API에 신경 쓰지 않은 사람들은 여전히 ​​신경 쓰지 않습니다. 관심 있는 사람들은 일부 앱, 통합, 플러그인 및 기타 멋진 프로젝트를 만들었습니다.

#wordpress REST API가 v4.7 핵심으로 병합될 때 사람들은 깜짝 놀랐습니다! 변경 사항이 발생하면 놀라는 것과 같습니다. 결국, 모든 것이 잘 작동합니다.

트윗하려면 클릭

그리고 우리는 멋진 프로젝트의 주제에 있습니다. 가장 성공적인 사람들은 곧 출시될 페이지에서 시작된다는 사실을 알고 계십니까? 그리고 많은 경우에 출시 예정 및 유지 관리 모드 플러그인을 사용하여 구축된 출시 예정 페이지입니다.

출시 예정 및 유지 관리 모드

이 플러그인은 끌어서 놓기 빌더, 170개 이상의 테마, 동급 최고의 SEO 설정, 자동 응답 및 이메일 서비스, 그리고 몇 분 안에 완벽한 출시 예정 페이지를 만들 수 있는 기타 여러 기능과 함께 제공됩니다. 그리고 무엇보다도 플러그인이 Depositphotos 플러그인에서 직접 최고의 비주얼을 찾을 수 있음을 의미합니다. 그러나 컬렉션의 팬이 아니라면 Yay Images는 또한 스톡 콘텐츠의 훌륭한 소스입니다.

하지만 이것으로 충분합니다. 이제 우리의 주요 주제인 REST API로 돌아갑시다.

우리는 REST API에 관심을 갖고 WP 기반 SaaS를 구축할 때 이를 활용합니다. 안정적이고 빠르며 작업하기 쉽고 WP에 꼭 맞고 대부분의 경우 문서화되어 있습니다. REST API가 무엇인지 모른다면 이것은 아마도 당신을 위한 게시물이 아닐 수 있지만 REST API가 무엇인지(비디오 및 텍스트) 확인하고 아마도 다음 프로젝트에서 사용할 것입니다.

노선? 끝점? 다 똑같지 않아?

아니요, 똑같지 않습니다. 차이점은 대부분의 사람들에게 미묘하며 경로와 끝점이라는 용어를 같은 의미로 사용하지만 그렇게 복잡하지는 않습니다. 경로는 거의 URL입니다. 끝점에 액세스하는 데 사용되는 "이름"입니다. 사용하는 엔드포인트는 사용하는 HTTP 요청 유형에 따라 다르기 때문에 단일 경로에서 여러 엔드포인트를 가질 수 있습니다. GET , POST , PUT 또는 DELETE 는 일반적으로 다른 목적을 수행할 수 있고 수행합니다. GET 을 통해 yoursite.com/wp-json/v2/posts/1에 액세스하면 ID #1의 게시물에 대한 세부 정보를 얻을 수 있습니다. 동일한 경로에서 DELETE 를 사용하면 해당 게시물을 삭제하는 다른 끝점(또는 원하는 경우 함수)이 호출됩니다. 공식 REST API 핸드북에는 이 주제에 대한 자세한 정보가 있으므로 자세히 알아보십시오.

#wordpress REST API 경로와 엔드포인트는 동일하지 않습니다! 경로는 끝점에 액세스하는 데 사용되는 "이름"입니다. 단일 경로는 일반적으로 여러 끝점과 연결됩니다.

트윗하려면 클릭

기본 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 형식의 게시물 10개를 표시합니다. 사람이 읽을 수 있는 버전의 응답을 원하면 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;
}

사용자 지정 접두사가 있는 끝점을 건너뛰고 배열에 보관하십시오. 배열을 반환하는 것을 잊지 마십시오.

REST URL 접두사 사용자 정의

사용자 지정 끝점은 사용자 지정에도 불구하고 기본 끝점과 동일한 접두사를 사용합니다. mysite.com/wp-json/custom-endpoint/처럼 보입니다. 어쩌면 당신은 그 추한 것을 발견하거나 기본 항목을 좋아하지 않을 수도 있습니다. 그것을 변경하는 것은 코드 한 줄의 문제입니다. 테스트 목적을 위해 아래 코드를 테마의 functions.php 에 배치하고 열린 대시보드 – 설정 – 영구 링크를 저장한 후 재작성 규칙을 플러시합니다.

add_filter( 'rest_url_prefix', 'rest_url_prefix' );

function rest_url_prefix( ) {
  return 'api';
}

위의 필터를 사용하면 끝점이 mysite.com/api/custom-endpoint/가 되고 이전 mysite.com/wp-json/custom-endpoint/ URL을 열면 404 오류가 발생합니다.

접두사가 WP에 의해 자동으로 추가되지 않으므로 사용자 지정 끝점에 버전 번호를 포함해야 합니다. 버전 번호 접두사는 향후 변경으로 인해 이전 엔드포인트를 사용하는 클라이언트가 중단되지 않도록 합니다. mysite.com/api/v1/custom-endpoint/와 같은 것을 얻기 위해 register_rest_route() 를 호출할 때 버전 접두사를 포함하고 나중에 "v2" 등을 가질 수 있도록 해당 "v1" 뒤에 모든 끝점을 유지하십시오.

변경 사항 테스트

REST API 경로 및 끝점을 제거하거나 수정해도 WP 사이트의 98%에서는 차이가 없습니다. "왜?" – REST API를 전혀 사용하지 않기 때문입니다. 그러나 귀하의 경우 모든 것과 마찬가지로 변경 사항으로 인해 문제가 발생할 수 있으므로 연결된 앱을 테스트했는지 확인하십시오. 그리고 내일보다 오늘 버그를 발견하는 것이 좋습니다.