Salesforce API 활용 - 2

cherryjenny·2024년 5월 8일

Bulk API

Bulk API는 RESTful 기반으로, 많은 데이터를 한꺼번에 처리할 때 유용하다. 비동기로 처리된다는 점이 REST API 및 SOAP API와 다른 점이다.

Bulk API는 POST로 작업을 실행하고 , GET으로 data를 업로드 한 뒤, PATCH로 한번에 처리하는 형식을 띄고 있다.

POST

Bulk API는 REST 기반이므로 URI, HTTP method, Header, Body의 구성이 동일하다.

  • /services/data - REST API가 사용하는 동일한 엔드포인트를 사용하고 있다.
  • /jobs/ingest - Bulk API 작업을 생성하기 위해 리소스에 액세스하고 있음을 나타낸다.

body에는 다음과 같이 입력한다. Bulk API 작업은 CSV 파일로 작업하는 것이 가장 효율적이기 때문에, contentTypeCSV로, lineEnding의 경우 크게 Linux/Unix는 LF, Windows는 CRLF로 작성한다.

{
"operation" : "insert",
"object" : "Account",
"contentType" : "CSV",
"lineEnding" : "CRLF"
}



결과

  • "id" - 이 작업에 대해 반환된 작업 ID를 표시
  • "state" - 작업을 생성하면 즉시 Open상태로 설정된다. 데이터 수신을 시작할 준비가 되었음을 의미한다.
  • "contentUrl" - 작업에 대한 데이터를 로드하는데 사용되는 URL을 표시한다.

GET


Content-type 확인하고, Body에 raw 데이터로 입력한 뒤 send하면 별다른 response없이 201 상태코드만 오면 데이터 업로드 성공

PATCH


업로드를 다 했으면 상태를 변경하기 위해 PATCH API를 호출한다. 그럼 서버에 사용자가 데이터를 다 업로드 했으니, 처리 시작해라!! 라는 요청을 보내는 거고, 앞으로는 서버가 일을 잘 처리해주기를 기다리면 된다.

확인

서버가 일을 잘 처리했는지 확인하고 싶다면, Setup에 Bulk Data Load Jobs로 들어가 확인해보기! 몇개의 레코드가 들어갔는지, 작업 상태는 어떠한지까지 모두 체크가 가능하다.





Pub/Sub API

Pub/Sub API는 org와 외부 시스템간의 변경사항을 실시간 반영하기 위해 사용된다. Salesforce 플랫폼의 event stream을 구독하여 외부시스템을 실시간 이벤트와 통합할 수 있다. 활용 예시로 Apex 트리거, Process Builder 및 Flow Builder를 사용하여 이벤트를 감지할 수 있고, 제어도 할 수 있다. Pub/Sub API의 proto는 여기서 확인해보자!

특히 Salesforce 외부 시스템에 비즈니스 데이터가 저장되어 있는 경우 유용하다. 외부 시스템에 데이터 변경이 있을 때 Salesforce 데이터와 동기화 할 수 있을 뿐만 아니라 변경에 대응한 비즈니스 로직도 처리할 수 있기 때문! 예를 들어 외부 주문시스템의 주문을 감지하고 플랫폼 이벤트를 자동으로 알려줄 수 있다.

publish하거나 Subscribe 할 수 있는 이벤트들은 다음과 같으며, 모든 이벤트들은 event bus에 게시된다.

  • Chage Data Capture: 레코드의 변경사항을 얻을 수 있다. CUD+Undelete포함!
  • Platform event: 플랫폼 이벤트 object를 생성하여 이벤트 데이터의 스키마를 정의 할 수 있다.

Event Bus

모든 이벤트는 이벤트 버스로 들어오고, 이벤트 구독자는 이벤트 버스 채널에서 이벤트를 검색한다. 이 이벤트 버스로 들어오는 모든 이벤트는 72시간 동안 저장되기 때문에 클라이언트 연결이 끊어졌을 때 놓친 이벤트를 검색해서 따라잡을 수 있다!

이때 구독자가 이벤트를 검색할 수 있도록 하는 장치는 replayId 필드에 있는 opaque ID이다. replayId에 있는 필드값은 이벤트가 이벤트 버스 내에서 존재하는 주소값을 의미한다.

opaque ID?
오파크(opaque)란 불투명한 이라는 뜻으로, 여기선 포인터를 의미하기 때문에 내부가 어떤 멤버들로 구성되어 있는지 알 수 없다. 우리가 사용할 땐 바이너리 타입으로 저장해서 사용하면 됨!

추가적인 replay option은 ReplayPreset에서 설정할 수 있다. proto에서 발췌해왔는데, 각각의 옵션은 다음과 같을 때 사용한다.

  • CUSTOM With Replay ID : 특정 이벤트를 놓친 경우(연결 실패 등) 사용
  • LATEST: 클라이언트가 이전 이벤트 메세지가 아닌 새로운 이벤트 메세지를 받아야 하는 경우
  • EARLIST: 이벤트 버스에 저장된 모든 이벤트를 검색할 경우 (많은 이벤트가 저장되어 있다면 성능 저하 조심)

더 자세한 내용은... 요기 참고.. 솔직히 어려워서 직접 써보지 않는 이상 와닿지가 않는다;;

profile
세일즈포스 개발..로그..

0개의 댓글