동적으로 집계된 Hyperlambda 게이트웨이 엔드포인트

이 기사에서 보여주려는 것은 프로그래밍 언어에 관계없이 이전에 누구도 수행한 적이 없습니다. 인간이 이해할 수 있는 용어로 설명하기 위해 Hyperlambda 스니펫이 있는 데이터베이스가 있습니다. 그런 다음 데이터베이스에서 모든 레코드를 읽고 별도의 스레드에서 모든 스니펫을 병렬로 실행하는 HTTP 끝점을 생성한 다음 각 실행 결과를 호출자에게 반환합니다.

여전히 실행되는 모든 코드는 서버에서 유지되므로 본질적으로 "초동적"이지만 그림과 같이 GraphQL 또는 Firebase "비즈니스 로직 주입 공격"의 위험이 없습니다. 1에서 10 사이의 동적 척도에서 이것은 약 100+ 정도입니다. 그것은 다른 모든 "동적 프로그래밍 언어"를 지루하고 절망적으로 정적으로 보이게 만듭니다. Hasura와 같은 매우 역동적인 GraphQL 또는 Supabase와 같은 PostgREST도 비교할 수 없을 정도로 본질적으로 "정적"이 되는 반면, Hyperlambda 구현은 사실상 "비즈니스"로부터 100% 완벽하게 안전하면서도 본질적으로 수십 배 더 역동적이 됩니다. 논리 주입 공격”.

사용 사례 중 일부는 데이터베이스에서 재사용 가능한 통합을 갖는 것일 수 있습니다. 그런 다음 HTTP 끝점을 데이터베이스의 콘텐츠로 간단히 채울 수 있습니다. 이 시점에서 여러 끝점에서 일부 스니펫을 재사용할 수 있으며 끝점의 구현을 수정하는 것은 단순히 의미합니다. 기존 레코드 삭제, 추가 또는 변경. 재사용성 척도에서 이 점수는 다른 모든 것과 비교하여 약 100점 이상입니다.

With some 50 snippets in your database, totalling at 1,000 lines of code, and some 250 endpoints, with a many to many relationship towards your snippets, you could probably replace 5 million lines of legacy code, without even breaking a sweat!



다음 YouTube 비디오에서 구현한 내용은 각 스니펫을 병렬로 실행하므로 실행 시간은 데이터베이스에 스니펫이 5개 있는지 여부와 상관없이 가장 오래 실행해야 하는 스니펫보다 크지 않습니다. 따라서 기존 레거시 제품에 비해 성능이 2~5배 정도 향상될 것입니다. 코드로 말하자면 Stripe payments을 구현하는 엔드포인트가 필요하다고 상상해 보십시오. 잘 ...

execute "(select content from snippets where name = 'stripe')"


... Stripe 결제와 통합되는 엔드포인트를 만들었지만 여전히 엔드포인트에 입력 인수를 동적으로 적용할 수 있습니다.

예를 들어 다대다 관계 테이블을 추가하면 동적 특성 외에도 매우 재사용이 가능하므로 사용하려는 스니펫을 세 번째 URL 필드로 간단히 선언할 수 있습니다. 데이터베이스 테이블 – 그러면 URL 테이블에서 스니펫 테이블로 다대다 관계를 적용합니다. 그런 다음 엔드포인트를 실행할 때 스니펫 테이블에서 현재 실행된 URL에 연결된 모든 레코드를 선택합니다. 그러나 지금은 제가 보여드리려는 내용을 재미있게 살펴보십시오. 이것은 인류 역사를 통해 이전에 보여진 적이 없습니다. 그리고 매우 유용하고 매우 동적 코드를 작성하고 매우 재사용 가능한 논리를 만들 수 있습니다. 동시에 모든 것이 병렬로 실행되어 100배 빠른 소프트웨어가 탄생합니다.



아래는 26줄의 코드인 내 HTTP 끝점에 대한 코드입니다.

.arguments
   name:string
   email:string
validators.email:x:@.arguments/*/email
validators.string:x:@.arguments/*/name
   min:5
   max:25
.lambda
   join
data.connect:code
   data.read
      table:snippets
      columns
         content
   for-each:x:@data.read/*/*/content
      add:x:+/*/*
         hyper2lambda:x:@.dp/#
      add:x:@.lambda/*/join
         .
            fork
   insert-before:x:@.lambda/*/join/*/fork/0
      get-nodes:x:@.arguments
eval:x:@.lambda
add:x:+
   get-nodes:x:@.lambda/**/.result/*
return


유효성 검사기를 제거하고 [.arguments] 컬렉션을 다음과 유사한 항목으로 바꾸는 경우에 유의하십시오.

.arguments:*
.lambda
   join
data.connect:code
   data.read
      table:snippets
      columns
         content
   for-each:x:@data.read/*/*/content
      add:x:+/*/*
         hyper2lambda:x:@.dp/#
      add:x:@.lambda/*/join
         .
            fork
   insert-before:x:@.lambda/*/join/*/fork/0
      get-nodes:x:@.arguments
eval:x:@.lambda
add:x:+
   get-nodes:x:@.lambda/**/.result/*
return


20줄의 코드에 불과하지만 이론상 적어도 평생 동안 작성한 모든 HTTP API 코드를 대체할 수 있는 20줄의 코드입니다. 그리고 HTTP API는 본에 대해 비동기이며 모든 단일 스니펫을 병렬로 실행합니다. 당신이 나에게 묻는다면 20 줄의 코드로 나쁘지 않습니다 ... ;)

Psst, 만약 당신이 그것을 이해하지 못했다면, 기사를 한 번 더 읽고, 비디오를 한 번 더 보고, 위의 20줄의 코드가 이론적으로 인류 역사를 통해 쓰여진 모든 서버 측 코드를 대체할 수 있다는 것을 깨달으십시오. , 인간 소프트웨어 개발자에 의해 ...

I can replace everything that all backend software developers have done throughout human history with no more than 20 lines of code - Not bad for a Thursday ... ^_^

좋은 웹페이지 즐겨찾기