API (Application Programming Interfaces) 설계는 어려운 노력이 될 수 있습니다. 좋은 API에는 간단하고 사용하기 쉬운 간단한 인터페이스가 있습니다. 이 간단한 인터페이스 뒤에는 많은 복잡한 시스템 상호 작용이있을 수 있으며, 이러한 상호 작용은 명확하게 정의 된 엔드 포인트 작업의 물을 실제로 진흙 투성이 할 수 있습니다. 시간이 지남에 따라 개발자는 기존 엔드 포인트에 대한 추가 비즈니스 논리를 "해결"하라는 요청을받을 수 있습니다. 그런 다음 그것을 알기 전에 단일 API 호출은 주요 흐름의 일부로 12 개가 넘는 시스템과 상호 작용하고 있습니다.
간단한 파이프 라인을 개발할 수는 있지만 기본 흐름을 가리지 않고 나중에 추가 작업을 추가 할 수있는 기능이 있으면 좋지 않습니까? 이 기사는 API가보다 강력한 상호 작용을 수행 할 수있는 능력을 제공하기 위해 WordPress에서 아이디어를 조정하고 일반적으로 프로그래밍하는 방법을 보여줍니다.
키 테이크 아웃
Core Endpoint 코드를 변경하지 않고 추가 기능을 동적으로 추가 할 수 있도록 유연성을 향상시키고 깨끗한 주요 흐름을 유지하기 위해 PHP API의 후크를 사용하십시오.
API의 다른 부분에서 사용할 수있는이 후크를 추가, 제거 및 트리거하여 전역 기능을 정의하여 후크를 구현하여 기본 응용 프로그램 논리에 대한 최소한의 중단을 보장합니다.
성공적인 데이터베이스 인서트 후 또는 요청 유효성 검사 중에 API의 상태 또는 조치를 기반으로 추가 작업을 실행하기 위해 API 라이프 사이클 내에 전략적 지점에 후크를 배치하는 것을 고려하십시오.
후크 관련 콜백은 성능 병목 현상을 피하고 콜백 기능을 분리하여 디버깅을 단순화하고 API 응답 성을 유지하기위한 활성 콜백 수를 염두에 두어 모범 사례를 준수합니다.
개발자 커뮤니티와 약혼하여 새로운 후크에 대한 피드백 및 요청을 받으십시오. 이는 API의 기능과 유연성을 지속적으로 개선하여 광범위한 재 작성없이 새로운 비즈니스 요구 사항에 쉽게 적응할 수 있습니다.
고리/행동이란 무엇입니까?
후크 (일명 액션/필터)는 WordPress 커뮤니티의 이벤트 및 관련 콜백에 제공된 이름입니다. 프로그래밍에 대한 경험이 있으면 콜백 및 게시자 - 서브 스크립 러 패턴에 익숙 할 수 있습니다. 처리 중에 시스템은 해당 이벤트에 가입 한 많은 기능에 0을 호출하는 이벤트를 트리거 할 수 있습니다. 예를 들어, 페이지로드에 응답하여 WordPress는 헤더를로드하거나 제목을로드하거나 게시물을 목록하거나 올바른 템플릿을 찾는 기능을 호출합니다. 이 작업은 페이지를 생성하는 주요 과정을 어수선하지 않고 실행됩니다. 훅의 뒤에있는 아이디어는 새로운 것이 아니며 WordPress에 의해 발명되지 않았습니다. 그러나 WordPress는 서버 측 페이지 처리 라이프 사이클 동안이를 구현하는 데 큰 도움이되었습니다. 제 생각 에이 후크의 사용은 아마도 플랫폼이 가지고있는 가장 큰 기능 일 것입니다. 이러한 후크를 사용하면 사용자는 플러그인 또는 테마 등 자체 기능을 작성하여 WordPress에 연결하고 필요할 때 원하는 코드를 실행할 수 있습니다. 사용자에게 전송 된 헤더를 변경해야합니까? 문제 없음 : WP_HEADERS 이벤트에 연결하면 적합한 상태에서 헤더를 변경할 수 있습니다.
왜 API에서 후크를 사용합니까?
후크는 일부 측면 작업을 트리거하고, PHP CURL 명령을 통해 다른 시스템을 호출하고, 객체를 구축하고, 나중에 다른 시스템이 픽업하여 이메일을 보내고, 이메일을 보내고, 작업 대기열에 넣는 등 많은 것들에 좋습니다. 그리고 더. 이것은 주어진 엔드 포인트의 주요 흐름을 흐리게 할 필요없이 모든 것을 수행 할 수 있습니다 (및 프로세스에서 새로운 API 버전을 강요 할 수 있음).
엔드 포인트가 사용자를 생성하기위한 경우 데이터베이스에서 해당 사용자 레코드를 작성하는 데 중점을 둘 수 있으며 그 과정에서 그 과정에서 듣는 사람에게 전화를 걸 수 있습니다. 어쩌면 사용자 레코드를 만든 후“이 말을 듣는 사람이라면 누구나 사용자를 만들었습니다. 어쩌면 일부 콜백 함수는 이벤트에 가입했으며 듣고 있거나 아무도 없을 수도 있습니다. 이벤트는 실제로 신경 쓰지 않습니다.
이 시스템을 사용하면 API가 나중에 작성 될 수있는 코드를 호출 할 수 있습니다. API 엔드 포인트 코드 자체를 터치하지 않고도이 작업을 수행 할 수 있습니다. 이것이 어떻게 작동하는지 보여주기 위해 기어를 변경하고 PHP API에서 시작하는 방법의 기본 메커니즘을 보여 봅시다. 여기에서 PHP를 사용하는 동안 실제로 다른 언어를 사용하여 웹 응용 프로그램에서 유사한 논리를 구현할 수 있습니다.
기본 메커니즘 구축
시작하려면 후크/액션을 추가 할 수 있어야합니다 (지금부터“후크”라고 함). 또한 후크를 제거하고 마지막으로 후크를 트리거하는 기능이 필요합니다. 이러한 메커니즘을 정의하면 API에 포함되어 있는지 확인한 다음 API 에서이 후크를 호출 할 수있는 장소를 찾아야합니다. 아래는 우리가 이것을 설정하고 싶은 한 가지 방법입니다.
여기 hooks.php :
이제 hooks.php 파일을 만들었으므로 이러한 기능을 볼 수 있도록 API에 포함시켜야합니다. 이 작업이 완료되면 Do_hook을 사용하여 API에 후크를 삽입하는 문제 일뿐입니다.
간단한 예로서, 우리는 시스템에 새 사용자를 등록하기위한 API가 있다고 가정 해 봅시다. REST API 엔드 포인트가 /AddUser라는 REST API 엔드 포인트가있을 수 있습니다. 단순성의 이름으로, 여기서 목표는 새로운 사용자 이름과 나이를 데이터베이스 사용자 테이블에 삽입하는 것입니다. 꽤 똑바로?
<span>// Global array which will hold all of our hooks
</span><span>// We will reference this array in each function to add/remove/call our hooks
</span><span>// The code below should also be seen by any callbacks we write for the system later.
</span><span>$hooks = [];
</span>
<span>// Below are global functions that can be seen from our API code
</span><span>// The add_hook method will allow us to attach a function (callback) to a given event name
</span><span>function add_hook($event_name, $callback) {
</span> <span>global $hooks;
</span>
<span>if ($callback !== null) {
</span> <span>if ($callback) {
</span> <span>// We can set up multiple callbacks under a single event name
</span> <span>$hooks[$event_name][] = $callback;
</span> <span>}
</span> <span>}
</span><span>}
</span>
<span>// Super easy to implement, we remove the given hook by its name
</span><span>function remove_hook($event_name) {
</span> <span>global $hooks;
</span>
<span>unset($hooks[$event_name]);
</span><span>}
</span>
<span>// When we want to trigger our callbacks, we can call this function
</span><span>// with its name and any parameters we want to pass.
</span><span>function do_hook($event_name, ...$params) {
</span> <span>global $hooks;
</span>
<span>if (isset($hooks[$event_name])) {
</span> <span>// Loop through all the callbacks on this event name and call them (if defined that is)
</span> <span>// As we call each callback, we given it our parameters.
</span> <span>foreach ($hooks[$event_name] as $function) {
</span> <span>if (function_exists($function)) {
</span> <span>call_user_func($function, ...$params);
</span> <span>}
</span> <span>}
</span> <span>}
</span><span>}
</span>
로그인 후 복사
로그인 후 복사
위의 코드는 새로운 사용자를 추가 할 수있는 방법에 대한 지나치게 단순하고 일반화 된 관점입니다. 아이디어는 누군가가 우리의 API /Adduser endpoint를 호출한다면 결국 게시 된 데이터에서 사용자의 이름과 나이가 철회되는이 기능에 도달하게된다는 것입니다. 먼저 (적절한 REST 규칙을 지시하는대로) 게시 중인지 확인한 다음 사용자를 사용자 테이블에 삽입하려고합니다.
다음, 사용자가 성공적으로 삽입 된 경우, 우리는 사용자가 생성 된 것을 듣는 모든 코드를 듣도록 훅을 호출하려고합니다 (이것은 다른 언어로 이벤트를 올리는 것과 유사합니다).
요구 사항이 변경 될 때해야 할 일
몇 달 후, 마케팅 부서는 새 사용자가 만들어지면 사용자의 세부 정보가 포함 된 이메일을 보내야한다고 주장합니다. 우리는 도우미 기능을 API에 작성한 다음이 엔드 포인트 코드에서 호출하는 경향이있을 수 있습니다. 훌륭합니다… 그게 전부라면 요청 된 전부입니다. 그러나 지원 팀이 나중에 와서 사용자를 Zendesk 시스템에 추가하기를 원한다면 어떻게해야합니까? 따라서 다른 기능을 작성 하고이 엔드 포인트로 호출하는 태클도 있습니다.
다음으로 아는 다음,이 엔드 포인트는 웹 사이트 데이터베이스에 사용자를 추가 할뿐만 아니라 이메일을 보내기위한 기능을 호출하고 Zendesk, Jira 및 Microsoft Cloud에 사용자를 추가 한 다음 성공/실패 결과를 처리하는 것입니다. 이 추가적인 내용은 실제로 사용자를 데이터베이스에 추가하는 명확한 지점에서 벗어나는 것입니다. 우리는 하나의 이벤트에 전화를 걸고 다른 코드가 사용자가 생성 될 때 듣고 자신의 일을 수행하고 자신의 일을 수행 할 필요 없이이 엔드 포인트를 수정할 필요가 없습니다. 아마도 새로운 사용자를 추가하는 것에 대해 다른 서비스를 제공하지 않으므로 아무도 아무것도 할 것을 요구하지 않습니다. 종말점은 신경 쓰지 않아도됩니다. 꽤 굉장해?
훅의 이름을 알려 주서 예제를 계속하겠습니다. 이것은 모든 콜백 코드가 듣기 위해 사용해야하는 이름입니다. 다시 말하지만, 다른 언어는이 설정을 "이벤트"라고합니다. 따라서 더 많은 것을 배우려면 주어진 언어로 찾아보십시오.
우리는 후크 추가 _user라고 부를 것입니다. 단순하고 바로 요점까지 생각하지 않습니까? 이름이 있으면이 후크를 부를 위치를 결정할 수 있습니다. 성공적인 삽입 직후에 좋은 생각이 될 것 같아요 :
이제 우리는 adds_user hook 또는 전혀 듣지 않는 수십 개의 콜백 함수를 가질 수 있습니다. 어쩌면 우리는 사용자를 Zendesk에 삽입 할 책임이있는 콜백이 있고 이름과 나이를 가져 와서 마케팅에 이메일을 생성하는 다른 콜백이있을 수 있습니다. 이 "가입자"코드는 API 프로젝트 내부의 hooks.php 코드를 볼 수있는 한 코드베이스의 다른 곳에서 살 수 있습니다. 일반적으로 콜백 함수를 별도의 파일에 넣고 해당 파일도 API에 포함시킵니다. 아래는 이제 우리가 만든이 새로운 후크를 활용할 수있는 콜백의 한 예입니다.<span>// Global array which will hold all of our hooks
</span><span>// We will reference this array in each function to add/remove/call our hooks
</span><span>// The code below should also be seen by any callbacks we write for the system later.
</span><span>$hooks = [];
</span>
<span>// Below are global functions that can be seen from our API code
</span><span>// The add_hook method will allow us to attach a function (callback) to a given event name
</span><span>function add_hook($event_name, $callback) {
</span> <span>global $hooks;
</span>
<span>if ($callback !== null) {
</span> <span>if ($callback) {
</span> <span>// We can set up multiple callbacks under a single event name
</span> <span>$hooks[$event_name][] = $callback;
</span> <span>}
</span> <span>}
</span><span>}
</span>
<span>// Super easy to implement, we remove the given hook by its name
</span><span>function remove_hook($event_name) {
</span> <span>global $hooks;
</span>
<span>unset($hooks[$event_name]);
</span><span>}
</span>
<span>// When we want to trigger our callbacks, we can call this function
</span><span>// with its name and any parameters we want to pass.
</span><span>function do_hook($event_name, ...$params) {
</span> <span>global $hooks;
</span>
<span>if (isset($hooks[$event_name])) {
</span> <span>// Loop through all the callbacks on this event name and call them (if defined that is)
</span> <span>// As we call each callback, we given it our parameters.
</span> <span>foreach ($hooks[$event_name] as $function) {
</span> <span>if (function_exists($function)) {
</span> <span>call_user_func($function, ...$params);
</span> <span>}
</span> <span>}
</span> <span>}
</span><span>}
</span>
로그인 후 복사
로그인 후 복사
우리는이 고리를 어디에 놓을 수 있습니까?
위의 코드에서 우리는 단일 엔드 포인트의 후크를 사용하는 것을 보여줍니다. 이 후크는 /adduser 엔드 포인트가 호출되고 인서트가 성공한 후에 만 트리거됩니다. 그러나 이것이이 후크를 사용할 수있는 유일한 곳은 아닙니다. API 클래스에 API 키가 유효한지 확인하거나 특정 유형의 요청을 받았는지 확인하는 API 클래스에 라우팅 코드가있을 수 있습니다.
아래 이미지는이 모든 것이 건축 적으로 어떻게 보이는지에 대한 다이어그램입니다.
위 내용은 Flexible API 설계 : PHP API 파이프 라인 용 고리 만들기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!