편안한 쿼리 문자열 기반 API에 대한 모의를 제공하는 hapi 플러그인
공지: 이 프로젝트에 대한 지원이 종료되었습니다
이 프로젝트는 Walmart가 소유하고 유지 관리했습니다. 이 프로젝트는 수명이 종료되었으며 Walmart는 더 이상 이 프로젝트를 지원하지 않습니다.
우리는 더 이상 이 프로젝트의 문제를 모니터링하거나 풀 요청을 검토하지 않을 것입니다. 귀하는 자신의 책임 하에 이 프로젝트의 라이선스 조건 또는 분기에 따라 이 프로젝트를 계속 사용할 수 있습니다. 이 프로젝트에는 더 이상 Walmart의 버그 포상금 프로그램이나 기타 보안 모니터링이 적용되지 않습니다.
다음 조치를 취하는 것이 좋습니다.
보안상의 이유로 Walmart는 Github 또는 기타 플랫폼에 있는 기본 저장소의 소유권을 다른 개인/조직에 이전하지 않습니다. 또한 공개 패키지 관리 시스템에 대한 패키지 소유권을 양도하지 않습니다.
이 패키지를 포크하고 개발을 계속하려면 프로젝트의 새 이름을 선택하고 고유한 패키지, 빌드 자동화 등을 만들어야 합니다.
폐기 후에도 계속 유효한 이 프로젝트의 라이선스 조건을 검토하세요.##curved-carousel
선택적 곡률을 사용하여 무한 스크롤 가능한 캐러셀을 만드는 간단한 방법입니다.
구성에는 다음 옵션을 사용할 수 있습니다.
apiPrefix
조롱해야 하는 경로의 기본을 나타내는 문자열 또는 문자열 배열
기본값은 /api
입니다.
mocksDir
모의 파일이 포함된 디렉터리입니다.
기본값은 __dirname + './mocks'
입니다. 여기서 __dirname은 이 플러그인입니다.
mocksAdminPath
이 플러그인의 관리 페이지를 찾을 수 있는 상대 URL입니다.
기본값은 /admin/mocks
입니다.
mocksAdminServerLabels
hapi의 플러그인 등록 중에 사용되는 라벨 배열
기본값은 ['admin']
enabled
모의가 활성화되어 있는지 여부.
기본값은 false
enableForceCookiePage
쿠키 설정기 페이지를 등록할지 여부를 나타내는 부울입니다. 이 페이지에는 클라이언트가 서버 설정에 관계없이 모의 응답을 강제하도록 선택할 수 있는 always_ridicule
쿠키를 켜거나 끌 수 있는 간단한 버튼이 제공됩니다. 북마크릿 생성이 번거로운 초보 테스터나 장치에 유용합니다. 기본값은 false
forceCookiePath
쿠키 설정기 페이지를 찾을 수 있는 상대 URL입니다.
기본값은 /cookie
forceCookieValue
always_ridicule
쿠키의 값을 나타내는 문자열입니다. 특정 필수 쿠키를 공개적으로 알리지 않고도 서버에서 공개적으로 사용 가능한 옵트인 모의 방법을 사용할 수 있습니다. expires
값은 설정된 시간으로부터 30분입니다.
기본값은 "true"
입니다.
mocksDir
내부에서 module.exports
에 hapi 경로 배열을 노출하는 ridicule.js
파일을 만듭니다.
module . exports = [ {
method : 'GET' ,
path : '/hello' ,
handler : function ( request , reply ) {
reply ( 'hello world' ) ;
}
} , {
method : 'POST' ,
path : '/goodbye' ,
handler : function ( request , reply ) {
reply ( 'thanks for all the fish' ) ;
}
} ]
서버 시작 시 구성된 모든 경로는 임의의 40자 접두사로 등록됩니다. (예를 들어 /foo
경로는 /(uuid)/foo
에서 조롱됩니다)
모의 서버가 활성화되면 들어오는 모든 요청은 구성된 apiPrefix
와 일치됩니다. 일치하는 항목이 발견되면 요청이 내부적으로 모의 경로 처리기로 전달됩니다.
핸들러에서 요청을 모의할 때 구제 조치를 취할 수 있습니다(hapi는 경로에서만 일치하므로 쿼리 문자열 기반 시스템의 하위 집합만 모의할 때 유용합니다). 간단히 파일에 Rididcule을 require
다음, ridicule.bailout(req, res)
호출하세요. 여기서 req
와 res
핸들러 내부의 요청 및 응답 객체입니다.
요청을 조롱하는 가장 일반적인 방법은 경로 핸들러의 reply()
인터페이스 내에서 json 파일의 데이터를 반환하는 것입니다.
var data = require ( './mockFile.json' ) ;
var route = {
method : '*' ,
path : '/mockPath' ,
config : {
handler : function ( request , reply ) {
return reply ( data ) ;
}
}
} ;
그러나 사용자 지정 헤더 및 HTTP 상태 코드와 같은 추가 메타데이터를 응답에 추가할 수 있습니다. 기존 json 파일을 다른 객체 내부에 래핑하고 원본을 payload
로 설정하고 ridiculeSettings
필드를 추가하기만 하면 됩니다.
그래서 이 요청은
{
"foo" : " bar "
}
된다
{
"ridiculeSettings" : {
"statusCode" : 418 ,
"headers" : { "Content-Type" : " x-stream " }
}
payload: {
"foo" : " bar "
}
}
이는 hapi의 요청 흐름 맨 끝에 추가되므로 결과적으로 payload
모의 파일에 인라인되어야 하므로 스트림이나 버퍼가 아닌 문자열 및 JSON 개체만 지원하도록 제한된다는 점에 주목할 가치가 있습니다.
모의 객체를 활성화/비활성화하는 세 가지 방법이 있습니다.
hapi 구성 설정
설정에서 enabled
옵션을 true
로 변경할 수 있습니다. 이렇게 하면 처음에는 활성화되지만 나중에 다음과 같이 변경할 수 있습니다.
관리자 페이지 버튼 전환
mocksAdminPath
아래에 구성된 경로를 방문하여 언제든지 모의를 켜거나 끌 수 있습니다. 기본적으로 이는 /admin/mocks
입니다. 이는 hapi 레이블 뒤에 등록됩니다(설정에서 구성 가능하지만 기본적으로 ['admin']
). 이를 통해 프로덕션 사이트에서 조롱을 보낼 수 있고 공개적으로 액세스할 수 없는 포트에 토글 스위치가 존재하도록 할 수 있습니다.
클라이언트의 쿠키
쿠키 always_ridicule
이 클라이언트에서 구성된 forceCookieValue
(기본값은 문자열 "true", 예: always_ridicule="true"
)의 값으로 설정되면 구성된 모의 항목이 항상 제공됩니다(물론 삭제될 때까지). ). 또한, always_ridicule=false
서버의 현재 설정에 관계없이 클라이언트가 절대로 조롱되지 않도록 강제합니다.
hapi는 쿼리 문자열 매개변수가 아닌 경로에서만 경로를 일치시키므로 경로에 대해 두 개 이상의 쿼리를 일치시킬 수 있어야 합니다. 이를 위해 Ridicule은 ridicule.validate
메소드를 제공합니다.
ridicule.validate
는 요청과 응답 쌍을 취한 다음 유효성 검사기 개체로 구성된 validator
개체와 callback
함수를 취하는 함수입니다.
validator
개체는 각 키가 쿼리 문자열의 키를 나타내고 값은 문자열, RegExp 또는 쿼리 문자열의 해당 값과 일치하는 함수인 일반 개체입니다.
예를 들어 다음 쿼리 문자열은
?category=Music&genre=ska&year=2012
다음 유효성 검사와 일치합니다.
...
handler : function ( request , reply ) {
ridicule . validate ( request , reply , {
validator : {
category : 'Music' ,
genre : function ( value ) {
return value === 'ska' || value === 'rocksteady'
} ,
year : / ^d{4}$ /
} ,
callback : function ( request , reply ) {
reply ( { 'all' : 'good' } ) ;
}
} )
}
. . .
물론 여러 수표를 쉽게 연결할 수 있습니다
var queriesToCheck = [ {
validator : {
category : 'Music' ,
genre : 'ska' ,
year : / ^d{4}$ /
} ,
callback : function ( request , reply ) {
reply ( ) . file ( './authMock.json' ) ;
}
} , {
validator : {
foo : 'bar' ,
baz : 'biz'
} ,
callback : function ( request , reply ) {
reply ( { 'wordsAre' : 'hard' } ) ;
}
} ] ;
queriesToCheck . some ( function ( route ) {
return ridicule . validate ( request , reply , route ) ;
} ) ;
엔드포인트에서 요청 전체가 아닌 일부 요청을 모의하려는 문제가 발생할 수 있습니다. 이 경우, rider는 편리한 도우미 함수인 ridicule.bailout
을 제공합니다.
당신이 해야 할 일은 쿼리 검사의 끝에 이를 추가하고 핸들러 request
및 reply
인터페이스를 통과하는 것뿐입니다.
var matched = queriesToCheck . some ( function ( route ) {
return ridicule . validate ( request , reply , route ) ;
} ) ;
if ( ! matched ) {
ridicule . bailout ( request , reply ) ;
}
이에 대한 대안은 최종 쿼리의 유효성 검사기 개체를 true
로 설정하는 것입니다. 이는 제공된 쿼리와 자동으로 일치하며 포괄적인 역할을 할 수 있습니다.
var queriesToCheck = [ {
validator : {
category : 'Music' ,
genre : 'ska' ,
year : / ^d{4}$ /
} ,
callback : function ( request , reply ) {
reply ( ) . file ( './authMock.json' ) ;
}
} , {
validator : true ,
callback : function ( request , reply ) {
reply ( ) . file ( './catchall.json' ) ;
}
} ] ;
queriesToCheck . some ( function ( route ) {
return ridicule . validate ( request , reply , route ) ;
} ) ;