주인 | 개발자 |
---|---|
Fat Free Framework 플러그인: 코드와 외부 REST API를 연결합니다. F3-wcurl은 인증 및 성공 응답 캐싱을 처리하는 cURL의 논리적 추상화 계층 역할을 합니다.
F3 내장 Web
플러그인은 훌륭하고 개별 HTTP 요청을 처리하기 쉽습니다. F3-wcurl은 코드 내에 전체 원격 API 구현을 구축합니다.
시간이 지남에 따라 cURL 요청, 설정, 개체, 응답 등을 처리하기 위해 필수적이지만 반복적인 작업이 포함된 도구와 스크립트를 신속하게 구축해야 했습니다. 결국에는 동일한 기능을 계속 복사하고 수정했습니다. 몇 달 전에 작성된 것이 왜 작동하지 않는지 동일한 문제를 디버깅합니다.
cURL 옵션을 효과적으로 제어하고 액세스할 수 있더라도 F3-wcurl은 그렇게 하도록 강요하지 않습니다. 요청 자체, 요청이 무엇을 변경하고 그 대가로 받는지에 집중할 수 있습니다. F3 생태계용 플러그인으로서 자연스럽게 Prefab
, Cache
및 Web
(cURL 요청 자체는 아님)과 같은 멋진 종속성이 거의 없습니다.
F3 클래스는 관련 설정의 연관 배열로 구성됩니다. 배열은 코드에서 직접 전달되거나 INI 파일(F3-wcurl을 빌드하기 전에 F3으로 가져옴)에서 전달되어 F3 하이브에 저장될 수 있습니다.
F3-wcurl은 F3의 Prefab 및 캐시를 사용하므로 코드의 어느 곳에서나 동일한 wcurl 개체를 호출할 수 있으며 빠른 응답 전환이 가능합니다.
기본적으로 F3-wcurl은 F3 하이브에서 wcurl
키를 검색하지만 INI는 여러 다른 REST API 구현에 대한 설정을 편리하게 보관할 수 있습니다.
$ wcurl = wcurl:: instance ([ $ iniName = ' wcurl ' | $ optionsArray ]);
이 매우 간단한 배열 구조는 wcurl의 내부 작동을 정의합니다.
이름 | 유형 | 기본 | 설명 |
---|---|---|---|
뿌리 | 끈 | null | 요청 URI를 작성하는 데 사용되는 원격 API 루트입니다. |
cb_로그인 | 끈 | null | 인증을 수행할 수 있는 콜백 함수를 코드에서 설정합니다. 이는 call_user_func() 에 대한 유효한 콜백이어야 합니다. |
ttl | 정수 | 60 | 초, GET 응답을 캐시하는 시간 |
헤더 | 정렬 | [ ] | cURL 유효한 문자열 배열 ["Header: value", "Another-Header: Value"] |
사용자 에이전트 | 끈 | F3-wcurl 버전 | 사용자 에이전트 문자열 |
기본 인증 | 끈 | null | 기본 인증 헤더 보내기, username:password 형식으로 사용 |
쿼리토큰 | 끈 | null | 각 요청에 URL 토큰을 추가하세요. |
JSON 인코딩 | 부울 | 진실 | 날씨는 POST 본문을 JSON으로 직렬화하고 false 로 설정하면 본문을 일반 HTML 형식으로 보냅니다. |
곱슬곱슬한 | 정렬 | [ ] | RAW cURL 설정 완전한 제어를 위한 RAW cURL 설정 배열( key => val , 여기서 key는 상수이거나 문자열 이름일 수 있음) |
휴식하다 | 정렬 | [ ] | key => val 테이블(예제 섹션 참조) |
위 표에서 옵션을 설정하려면 하나 이상의 옵션과 함께 key => val
배열을 전달하세요.
$ wcurl -> setOptions (
[
' useragent ' = > ' F3-wcurl API integration ' ,
' encodeJSON ' = > false ,
' ttl ' = > 300 ,
// etc
]
);
전달한 옵션만 업데이트되며, 다른 모든 항목은 이전/기본 상태로 유지됩니다.
하나 이상의 옵션을 지우려면 기본값으로 재설정하려는 키의 이름 또는 배열 목록을 전달하십시오.
$ wcurl -> clearOptions ([ ' useragent ' , ' ttl ' /*, ... etc */ ]);
wcurl 클래스의 현재 상태를 나타내는 옵션의 전체 배열을 얻으려면 다음을 수행하십시오.
$ wcurl -> clearOptions ();
반환된 다차원 배열은 추출된 것과 정확히 동일한 클래스를 생성하려면 호환 가능해야 합니다.
클래스가 생성된 이후 실행된 요청 수, 수신된 http 응답 수 및 캐시에서 제공되는 수에 대한 통계를 반환합니다.
$ wcurl -> getStats ();
현재 지원되는 기능은 GET, POST, PUT, PATCH 및 DELETE입니다. 구현해야 할 필요성이 생기면 더 추가할 예정입니다.
$ response = $ wcurl -> get ( string $ url [, array $ fill = null [, array $ options = null ]] );
나는 이런 주장을 외운다.
UFO:
$ response = $ wcurl ->post( string $ url , array $ body = null [, array $ fill = null [, array $ options = null ]] );
UFBO - URL, 채우기, 본문, 옵션
$ response = $ wcurl ->put( string $ url , array $ body = null [, array $ fill = null [, array $ options = null ]] );
UFBO - URL, 채우기, 본문, 옵션
$ response = $ wcurl ->patch( string $ url , array $ body = null [, array $ fill = null [, array $ options = null ]] );
UFBO - URL, 채우기, 본문, 옵션
$ response = $ wcurl ->delete( string $ url , array $ body = null [, array $ fill = null [, array $ options = null ]] );
UFBO - URL, 채우기, 본문, 옵션
Rests 테이블은 똑같이 중요한 두 가지 목적을 제공합니다.
긴 원격 URL 경로를 구성할 때 특히 여러 위치에서 호출되는 경우 짧은 키워드로 기억하는 것이 더 쉽습니다. /lists/members/all/pages
대신 allmembers
와 같습니다. 때로는 여기에는 각 요청마다 입력해야 하는 고유한 매개변수도 포함됩니다. 이 개념은 이 플러그인이 존재하는 주요 이유 중 하나입니다.
계속 읽어보세요.
가장 좋은 방법은 .ini
구성에 원격 경로를 저장하는 것입니다. 채우기용 URL 변수는 양쪽에서 2 %
로 래핑됩니다.
TODO: 이 줄 바꿈 문자를 구성 가능하게 만듭니다.
[wcurl.rests]
allmembers =/lists/members/all/pages
withVariable =/lists/members/%%memberID%%/pages
또는 간단한 key => value
배열을 즉시 전달합니다. 이전 구성과 병합 됩니다.
$ wcurl -> setOptions (
' rests ' => [
' allmembers ' => ' /lists/members/all/pages ' ,
' withVariable ' => ' /lists/members/%%memberID%%/pages ' ,
' updateEmail ' => ' /lists/members/%%memberID%%/update '
]
);
명명된 경로를 사용하려면 전체 경로 대신 이름을 전달하세요.
$ response = $ wcurl -> get ( ' allmembers ' );
이는 /lists/members/all/pages
로 확인됩니다.
$ response = $ wcurl -> get ( ' withVariable ' , array ( ' memberID ' => ' abc123ID ' ) );
이는 /lists/members/abc123ID/pages
로 확인됩니다.
또는 POST 요청에서 다음 UFBO 매개변수를 전달해야 한다는 것을 알고 있습니다.
$ wcurl -> post ( ' updateEmail ' , // path shorthand to resolve name
[ ' memberID ' => ' abc123ID ' ], // fill this in the path
[ ' email ' => ' [email protected] ' ] // body to send
);
모든 구성을 기본 ini
파일에 넣으면 클래스는 처음으로 필요할 때만 초기화될 수 있습니다. 즉, 코드가 get()을 보내기로 결정한 경우입니다. 그 순간 클래스가 Prefab에 등록되지 않은 경우 필요에 따라 정확히 INI 구성에서 빌드됩니다.
전체 옵션 목록은 위의 몇 스크롤에 있는 옵션 배열 표를 참조하세요.
[wcurl]
root =http://mysite.api/v1
ttl =3600
cb_login =yourClass::cb_do_login
useragent = Zeus was here
headers = " Header: value " , " Another-Header: Value "
[wcurl.rests]
allmembers =/lists/members/all/pages
withVariable =/lists/members/%%memberID%%/pages
; Using with multiple API's
[apitwo]
root =http://yoursite.io/v2
ttl =60
useragent = Big Falcon Rocket
[apitwo.rests]
getUsers =/lists/members/all/pages
getOneUser =/lists/members/%%memberID%%/pages
$ wcurl -> setLogin ( callback ' yourClass::cb_do_login ' );
요청 결과가 HTTP 401 또는 403 코드인 경우 wcurl
로그인 콜백 함수를 호출한 다음 원래 요청을 반복합니다. 다시 오류가 발생하면 원래 함수 결과로 반환됩니다. wcurl
API 루트에 고유한 임시 파일에 쿠키를 저장합니다. 이 쿠키 파일은 모든 요청에 포함됩니다.
로그인이 성공하면 콜백은 true를 반환해야 합니다. 그렇지 않으면 인증 성공 후 요청 자동 반복이 실패합니다.
안 돼요! 로그인이 작동하지 않지만 여전히 return true
경우 request->login->request->login...
무한 루프가 발생할 수 있습니다.
로그인 기능 예시
static function cb_do_login (){
$ wcurl = wcurl:: instance ();
$ login = $ wcurl -> post ( " /login " , array (
' login ' => ' my_user ' ,
' password ' => ' covfefe ' )
);
if ( $ login [ ' status ' ][ ' http_code ' ]== 200 ){
return true ;
}
// or
$ wcurl -> setOptions ( [ ' basicauth ' => " $ user : $ password " ]);
}
wcurl::instance()
호출하면 싱글톤 클래스처럼 반환되므로 코드의 어느 위치에서나 동일한 객체가 사용됩니다. 클래스에서 새로운 인스턴스를 강제하려면 다음과 같은 것을 사용하십시오.
$ apiTwo = new wcurl ([ $ iniName | $ optionsArray ]);
그런 다음 $apiTwo
F3 하이브에 저장할 수 있습니다.
개선할 부분이 많지만 현재 필요한 기능을 만들 예정입니다. 귀하의 사용 사례에 불가능한 것이 있으면 문제를 제출하거나 PR을 제출하십시오. 이 훌륭한 프레임워크를 제공한 F3 개발자에게 감사드립니다. F3-wcurl과 같은 것을 찾고 있지만 사용하지 않는다면 다시 생각해 보십시오. 왜 아직 F3을 사용하지 않습니까?