Hyperlambda HTTP 인터셉터
3900 단어 apiprogrammingtutorialwebdev
이것은 AOP 소프트웨어 개발의 거의 HTTP에 해당하는 것이 되며, 물론 "Aspect Oriented Programming"을 의미하며 원래 끝점에 대한 호출 전후에 추가 기능을 첨부할 수 있기 때문에 소프트웨어를 만드는 보다 선언적인 방법입니다. .
다른 사용 사례는 예를 들어 Hasura 또는 Supabase에서 제공한 것과 같은 GraphQL 또는 PostgREST 엔드포인트와 같이 비즈니스 로직을 추가할 수 없는 HTTP 엔드포인트에 비즈니스 로직을 추가하는 것일 수 있습니다. 논리적으로 이것은 OOP "다형성"에 해당하는 HTTP 및 Hyperlambda가 됩니다. 정적 항목을 가져오고 원래 HTTP 메서드를 "재정의"하여 작동 방식을 수정할 수 있기 때문입니다. 아래 비디오에서 이러한 인터셉터가 어떻게 작동하는지 보여줍니다.
아이디어는 쉽게 이해됩니다. "무엇이든"HTTP 끝점을 가져옵니다. 원래 엔드포인트를 호출하는 새 인터셉터 엔드포인트를 생성하고 인터셉터 엔드포인트에 코드를 첨부하여 인터셉터 엔드포인트가 호출되기 전후에 작업을 수행할 수 있도록 합니다. 그런 다음 인터셉터에 제공된 인수를 인터셉트된 엔드포인트로 전달하고, 필요한 경우 인터셉트된 엔드포인트를 호출하기 전에 선택적으로 Authorization 헤더를 첨부합니다.
이제 인터셉터 사용을 시작하기 위해 해야 할 유일한 일은 원래 엔드포인트를 호출하는 동안 클라이언트가 사용하는 URL을 변경하는 것입니다. 인터셉터 끝점이 모든 인수를 허용할 수 있다고 가정하면 서명과 논리가 동일해야 합니다.
아래 위의 비디오에서 내가 사용하는 코드를 찾을 수 있습니다.
인터셉터.post.hl
.arguments:*
.description:Intercepts our foo endpoint
// Endpoint we're intercepting.
.endpoint:"https://tiger-polterguy.gb.aista.com/magic/modules/faq/foo"
/*
* Retrieving Authorization header to transmit to
* intercepted endpoint.
*/
request.headers.get:Authorization
/*
* Lambda object executed as an "intercepted lambda object"
* before invocation to HTTP endpoint.
*/
.before
log.info:BEFORE!!
/*
* This is where you would parametrise your above [.before] object
* with for instance arguments given by the client.
*/
// Evaluating [.before] lambda object.
eval:x:@.before
// Forwarding arguments given to endpoint to intercepted endpoint.
add:x:../*/http.post/*/payload
get-nodes:x:@.arguments/*
/*
* Checking if we've got an Authorization HTTP header,
* at which point we forward it to the original HTTP endpoint.
*/
if
not-null:x:@request.headers.get
.lambda
add:x:../*/http.post/*/headers
.
Authorization:x:@request.headers.get
// Invoking the intercepted HTTP endpoint.
http.post:x:@.endpoint
headers
Content-Type:application/json
convert:true
payload
// Sanity checking invocation to endpoint.
if
not
and
mte:x:@http.post
.:int:200
lt:x:@http.post
.:int:400
.lambda
log.error:Something went wrong as we invoked our intercepted HTTP endpoint
endpoint:x:@.endpoint
status:x:@http.post
result:x:@http.post/*/content
throw:Intercepted endpoint did not return success
public:true
status:502
/*
* Lambda object to execute after invocation to
* intercepted endpoint.
*/
.after
log.info:AFTER!!
/*
* This is where you would parametrise your above [.after] object
* with for instance arguments given by the client.
*/
// Evaluating [.before] lambda object.
eval:x:@.after
// Return result to caller.
add:x:+
get-nodes:x:@http.post/*/content/*
return
foo.post.hl
.arguments
name:string
auth.ticket.verify:root
log.info:Foo endpoint was executed
strings.concat
.:"Hello "
get-value:x:@.arguments/*/name
unwrap:x:+/*
return
result:x:@strings.concat
내가 하고 있는 일을 재현하려면 free demo LowCode cloudlet here에 가입하고 위의 비디오를 시청하십시오.
Reference
이 문제에 관하여(Hyperlambda HTTP 인터셉터), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/polterguy/hyperlambda-http-interceptors-29ce텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)