메인 콘텐츠로 건너뛰기

VillageSQL is a drop-in replacement for MySQL with extensions.

All examples on this page work on VillageSQL. Install Now →
이 가이드는 프리뷰 기능을 사용합니다. 서버를 --vsql_allow_preview_extensions=ON으로 시작하세요. 그렇지 않으면 INSTALL EXTENSION이 거부됩니다.
몇 개의 테이블 앞에 읽기 전용 JSON 엔드포인트를 두려면 보통 작은 서비스를 작성하고, 배포하고, 데이터베이스 계정을 주고, 살아 있게 유지해야 합니다. VillageSQL의 vsql_rest 확장은 대신 서버 프로세스 안에서 그 테이블을 제공하므로, 두 번째 프로세스도 새 배포도 없습니다. 기본값은 네트워크가 아니라 개발자 머신을 위해 만들어졌습니다. 어디에든 열기 전에 아래의 “포트를 노출하기 전에”를 읽으세요.

켜기

먼저 데이터베이스와 테이블을 만드세요. 리스너는 시작할 때 데이터베이스 구조를 읽고 vsql_rest.schema_ttl초(기본값 60) 동안 캐시하므로, 그 뒤에 만든 테이블은 캐시가 만료될 때까지 table not found로 응답합니다.
그다음 데이터베이스를 지정하고, 제공할 테이블을 지정하고, 리스너를 시작하세요:

읽기

테이블이 경로이고, 쿼리 문자열이 필터링을 합니다. 각 필터는 column=operator.value입니다:
원하는 열만 요청하세요:
or=(...)로 조건을 결합하세요:
limit과 offset으로 페이지를 넘기세요:
연산자는 eq, neq, lt, lte, gt, gte, like, cs_like, in, is입니다. in은 ?id=in.(1,3)처럼 목록을 받고, is는 ?price=is.null 또는 ?price=is.not.null처럼 null을 받습니다. limit이 없는 요청은 최대 vsql_rest.max_rows행을 반환하며, 이 값은 1000에서 시작합니다.

허용 목록

allowed_tables에 없는 테이블은 API 입장에서 존재하지 않습니다:
응답은 404이며, 테이블이 없든 단지 숨겨졌든 똑같이 읽힙니다.
allowed_tables를 비워 두는 것은 테이블이 없다는 뜻이 아닙니다. 모든 테이블이라는 뜻입니다. 리스너를 활성화하기 전에 공개하려는 테이블로 설정하세요.

테이블별 메서드 제한

table_methods는 각 테이블이 받아들이는 HTTP 메서드를 table:METHOD,METHOD 형식으로, 테이블 사이에 |를 두고 지정합니다:
기본적으로 모든 테이블이 모든 메서드를 받아들이므로, 리스너가 시작되기 전에 이것을 설정하세요. 테이블이 허용하지 않은 메서드는 거부됩니다:
쓰기를 허용하는 것도 같은 설정입니다:
성공한 삽입은 빈 본문과 함께 201로 응답합니다. 중복 키는 409로 돌아옵니다:

동작 지켜보기

다섯 개의 상태 카운터가 리스너에 대해 보고하며, 실제로 바인딩한 포트도 포함합니다:
http_port는 아무것도 수신 대기하지 않을 때 0으로 읽히며, 리스너가 시작되었는지 확인하는 가장 빠른 방법입니다. vsql_rest.port를 0으로 설정하면 운영 체제에 포트 선택을 맡기고, 어떤 포트를 골랐는지는 이 카운터에서 읽습니다.

포트를 노출하기 전에

기본값은 문을 열어 두며, 각각은 따로 보면 합리적입니다. require_auth는 OFF에서 시작하므로 어떤 요청도 토큰을 지니거나 필요로 하지 않습니다. 빈 allowed_tables는 스키마 전체를 공개합니다. 빈 table_methods는 DELETE를 포함한 모든 메서드를 허용하며, 그 상태의 리스너에 대한 DELETE는 성공합니다:
204로 응답하고, 행은 사라집니다. 종합하면, 아무것도 설정하지 않고 켠 리스너는 포트에 도달할 수 있는 누구에게나 스키마의 모든 테이블에서 행을 읽고, 삽입하고, 갱신하고, 삭제하게 해 줍니다. 노트북에서는 편리합니다. 그 외 어디서든, 활성화하기 전에 네 가지를 바꾸세요:
그다음 ssl_cert와 ssl_key를 설정해 HTTPS로 제공하세요. 바인드 주소 설정은 없고, 리스너는 시작하는 순간부터 모든 인터페이스에 바인딩하므로, 방화벽에서 포트를 막고 리버스 프록시만 도달하게 하세요.

문제 해결

함께 보기