cURL이란 무엇인가요?

cURL에 대해 들어본 적이 있나요? URL 구문을 사용하여 데이터를 송수신하는 유명한 명령줄 도구라고 위키백과에서 설명합니다. 여기. Couchbase와 관련된 예제부터 시작하겠습니다. N1QL 쿼리 서비스는 REST API를 통해 사용할 수 있습니다. 로컬 호스트에서 쿼리 서비스가 활성화되어 있다고 가정하고 cURL을 사용하여 N1QL 쿼리를 실행하려는 경우 다음과 같이 표시됩니다:

curl http://localhost:8093/query/service -d 'statement=SELECT * FROM default LIMIT 1'

를 사용하거나 전체 텍스트 쿼리를 실행하려면 다음과 같이 수행합니다.

curl -XPOST -H "Content-Type: application/json" http://localhost:8094/api/index/beer/query -d '{"explain": true,"fields": ["*"],"highlight": {},"query": {"query": "페일 에일"}}'

현재로서는 N1QL는 cURL을 사용한 REST API 호출의 예시일 뿐입니다. 그렇다면 왜 이런 제목을 붙였을까요? N1QL 쿼리에서 cURL을 호출할 수 있기 때문입니다.

N1QL의 cURL()

curl()은 원격(보통 HTTP) 엔드포인트를 통해 외부 JSON 데이터에 액세스할 수 있는 새로운 N1QL 함수입니다. 다른 N1QL 함수와 마찬가지로 이 함수는 다양한 N1QL 표현식 및 SELECT/DML 쿼리의 다양한 절(projection, where, from 등)에서 사용할 수 있습니다. from 절에서 사용하면 curl() 호출은 JSON 문서의 집합/모음을 생성해야 합니다.

이미 다음에서 상당히 광범위하게 다루었습니다. DZone를 읽어보시길 강력히 권해드리며, 다른 많은 DZone 게시물 N1QL에 대해 N1QL 팀이 작성한 글입니다.

새로운 언어를 시도할 때 누구나 하는 것처럼 아주 간단한 SELECT로 시작할 수 있습니다:

SELECT CURL("GET","https://maps.googleapis.com/maps/api/geocode/json", {"data":"address=santa+cruz&components=country:ES&key=YOUR_API_KEY"});

그러면 다음과 같은 JSON 결과가 표시됩니다:

여기에는 많은 정보가 있으며 식별된 주소의 좌표만 얻고 싶을 수도 있습니다. 쉽게 할 수 있습니다. cURL 함수의 결과를 다른 JSON 객체처럼 취급하기만 하면 됩니다:

SELECT CURL("GET","https://maps.googleapis.com/maps/api/geocode/json", {"data":"address=santa+cruz&components=country:ES&key=YOUR_API_KEY"}).results[0].geometry ;

그러면 원하는 결과를 얻을 수 있습니다:

이 기능은 매우 훌륭하지만 현재 데이터와의 링크가 없습니다. 주소는 있지만 지리적 좌표가 없는 문서가 있다고 가정해 보겠습니다. 이제 다음 N1QL 쿼리를 사용하여 해당 좌표를 추가할 수 있습니다:

업데이트여행 샘플USE KEYS "myDocumentWithoutCoordinates" SET geo = CURL("GET","https://maps.googleapis.com/maps/api/geocode/json", {"data":"address=santa+cruz&components=country:ES&key=YOUR_API_KEY"}).results[0].geometry returning *.

이제 N1QL 쿼리를 사용하여 외부 서비스를 기반으로 기존 문서를 수정했습니다.)

다음은 또 다른 예입니다. 이전과 동일한 FTS 쿼리이지만 N1QL 쿼리의 FROM 절로 되어 있습니다:

SELECT result.total_hits, array_length(result.hits) FROM curl("POST","http://localhost:8094/api/index/beer/query",{ "header":"Content-Type: application/json","data":{"explain":true,"fields": ["*"],"highlight": {},"query": {"query": "페일 에일"}} }) 결과;

그리고 이것은 당신에게 줄 것입니다:

[ { "$1": 10, "total_hits": 3815 } ] ]

이제 전체 텍스트 검색(또는 JSON을 반환하는 URL에 대한 모든 호출)을 실행하고 N1QL의 모든 장점을 사용하여 해당 JSON 데이터에 대한 멋진 투영을 얻을 수 있다는 것을 알게 되었습니다. 이를 통해 FTS와 N1QL을 통합할 수 있습니다. 예를 들어 결과를 버킷에 조인하는 것보다 FROM 절에서 cURL을 사용할 수 있기 때문입니다.

다음은 맥주와 양조장 문서가 포함된 전통적인 맥주 샘플을 사용하는 또 다른 예입니다. 먼저 이전 쿼리를 변환하여 '페일 에일'이 포함된 문서의 ID 목록을 가져옵니다:

이 FTS 쿼리에 대한 자세한 내용과 일반적으로 FTS REST API로 수행할 수 있는 작업은 다음을 참조하세요. 현재 문서.

이제 쉽게 참여할 수 있는 FTS의 문서 ID 목록이 생겼습니다:

SELECT beers.* FROM curl("POST","http://localhost:8094/api/index/beer/query", {"header":"Content-Type: application/json","data":{"explain":true,"fields": ["*"],"highlight": {},"query": {"query": "페일 에일"}} }) result UNNEST result.hits AS hit JOIN beer-sample beers ON KEYS hit.id

얼마나 멋진가요? 하지만 Couchbase 쿼리에만 국한할 필요 없이 외부 소스를 사용할 수 있습니다. 여기 또 다른 예가 있습니다. 다음에서 흥미로운 JSON 데이터 집합을 많이 찾을 수 있습니다. catalog.data.gouv. 예를 들어 뉴욕시에서 성별 및 어머니의 인종 그룹별로 가장 인기 있는 아기 이름. 실행을 배울 수 있는 13962행의 큰 JSON 파일로, 행 수가 많습니다:

SELECT count(row) FROM CURL("GET","https://data.cityofnewyork.us/api/views/25th-nujf/rows.json?accessType=DOWNLOAD) result UNNEST result.data AS row

주어진 이름 중 상위 10개를 원하는 경우 다음 쿼리를 실행하면 됩니다:

SELECT row FROM CURL("GET","https://data.cityofnewyork.us/api/views/25th-nujf/rows.json?accessType=DOWNLOAD") result UNNEST result.data AS row ORDER BY TONUMBER(row[13]) ASC, TONUMBER(row[12]) DESC LIMIT 10

요즘 뉴욕에서는 제이든과 이사벨라가 인기 있는 이름인 것 같아요 :)

이러한 예시를 통해 쿼리 언어 N1QL이 큰 JSON 파일 안에 무엇이 있는지 파악하는 혁신적인 방법이라는 것을 알 수 있습니다. 기본적으로 JSON 엔드포인트를 데이터베이스에 매핑할 수 있습니다.) 물론 아직 다루지 않은 다른 가능성도 있습니다. 예를 들어 Couchbase 버킷과 JSON 엔드포인트에서 JOIN을 사용하는 것과 같은 것입니다.

문서

이제 모든 cURL 기능을 지원하지는 않습니다. 하지만 기본적인 기능은 모두 지원하며 지금 바로 사용할 수 있습니다. 지금까지 지원하는 옵션 목록은 다음과 같습니다. 컬 함수는 최대 3개의 매개 변수를 사용합니다:

1 - 첫 번째 매개변수는 사용되는 HTTP 동사입니다. 지금까지는 "GET"과 "POST"를 지원합니다.

2 - 두 번째 매개변수는 엔드포인트 URL입니다.

3 - 세 번째 매개변수는 다양한 cURL 옵션을 나타냅니다.

보안 옵션

옵션

설명

사용자

서버 사용자 및 비밀번호

사용자명[:비밀번호]

기본

HTTP 기본 인증 사용

안전하지 않음      

인증서 없이 SSL 사이트에 연결 허용(H)

anyauth

curl을 사용하여 자체적으로 인증 방법을 알아내고 가장 안전한 방법을 사용합니다(저희의 경우 지금은 기본으로만 사용할 예정입니다). 향후에는 다이제스트도 지원할 예정입니다.)

기타 전송 관련 옵션

옵션

설명

연결 시간 초과

연결에 허용되는 최대 시간

최대 시간

전송에 허용되는 최대 시간

데이터     

HTTP POST 데이터(H)

데이터

헤더   

사용자 지정 헤더 LINE을 서버로 전달(H)

LINE

show-error

오류 표시. s를 사용하여 오류 발생 시 CURL()이 오류를 표시하도록 합니다.

침묵

무음 모드(아무것도 출력하지 않음)

최대 레디르  

허용되는 최대 리디렉션 수(H)

NUM

킵얼라이브 시간

킵얼라이브 프로브 사이에 몇 초간 기다리기

 

이 기능에 대한 여러분의 의견을 듣고 싶습니다. 이 기능을 어떻게 사용하시나요? 부족한 점이 있나요? 아래에서 여러분의 의견을 기다리고 있습니다.

작성자

게시자 로랑 도귄

Laurent는 파리에 사는 괴짜 금속공학도입니다. 주로 Java로 코드를 작성하고 AsciiDoc으로 구조화된 텍스트를 작성하며 데이터, 리액티브 프로그래밍 및 기타 유행어에 대해 자주 이야기합니다. 또한 Clever Cloud와 Nuxeo의 개발자 옹호자로 활동하며 해당 커뮤니티가 더 크고 강력하게 성장할 수 있도록 자신의 시간과 전문성을 바쳤습니다. 현재 Couchbase에서 개발자 관계를 운영하고 있습니다.

댓글 남기기