페이로드 인코딩
페이로드 인코딩
섹션 제목: “페이로드 인코딩”JSON, MessagePack, 바이너리를 포함한 형식 간 데이터 변환. 서비스 간 통신 및 워크플로우 데이터 전달을 위한 타입화된 페이로드 처리.
전역 네임스페이스. require 불필요.
payload.new(...) -- 직접 접근형식 상수
섹션 제목: “형식 상수”페이로드 타입용 형식 식별자:
payload.format.JSON -- "json/plain"payload.format.YAML -- "yaml/plain"payload.format.STRING -- "text/plain"payload.format.BYTES -- "application/octet-stream"payload.format.MSGPACK -- "application/msgpack"payload.format.LUA -- "lua/any"payload.format.GOLANG -- "golang/any"payload.format.ERROR -- "golang/error"페이로드 생성
섹션 제목: “페이로드 생성”Lua 값에서 새 페이로드 생성:
-- 테이블에서local p = payload.new({ user_id = 123, name = "Alice", roles = {"admin", "user"}})
-- 문자열에서local str_p = payload.new("Hello, World!")
-- 숫자에서local num_p = payload.new(42.5)
-- 불리언에서local bool_p = payload.new(true)
-- nil에서local nil_p = payload.new(nil)
-- 에러에서local err_p = payload.new(errors.new("something failed"))| 파라미터 | 타입 | 설명 |
|---|---|---|
value | any | Lua 값 (string, number, boolean, table, nil 또는 error) |
반환: Payload
형식 가져오기
섹션 제목: “형식 가져오기”페이로드 형식 가져오기:
local p = payload.new({name = "test"})local format = p:get_format() -- "lua/any"
local str_p = payload.new("hello")local format2 = str_p:get_format() -- "lua/any"
local err_p = payload.new(errors.new("failed"))local format3 = err_p:get_format() -- "golang/error"반환: string - payload.format.* 상수 중 하나
데이터 추출
섹션 제목: “데이터 추출”페이로드에서 Lua 값 추출 (필요시 트랜스코드):
local p = payload.new({ items = {1, 2, 3}, total = 100})
local data, err = p:data()if err then return nil, errend
print(data.total) -- 100print(data.items[1]) -- 1반환: any, error
페이로드 트랜스코딩
섹션 제목: “페이로드 트랜스코딩”페이로드를 다른 형식으로 트랜스코드:
local p = payload.new({ name = "test", value = 123})
-- JSON으로 변환local json_p, err = p:transcode(payload.format.JSON)if err then return nil, errendprint(json_p:get_format()) -- "json/plain"
-- MessagePack으로 변환 (컴팩트 바이너리)local msgpack_p, err = p:transcode(payload.format.MSGPACK)if err then return nil, errend
-- YAML로 변환local yaml_p, err = p:transcode(payload.format.YAML)| 파라미터 | 타입 | 설명 |
|---|---|---|
format | string | payload.format.*의 대상 형식 |
반환: Payload, error
Unmarshalling
섹션 제목: “Unmarshalling”소스 형식에 관계없이 페이로드를 Lua 값으로 강제 디코딩합니다:
local data, err = p:unmarshal()unmarshal()은 항상 Lua 형식으로 트랜스코딩하고 결과 Lua 값을 반환합니다. 원시 기본 값(비-Lua 형식의 경우 Go 객체일 수 있음)을 반환하는 data()와 달리 unmarshal()은 완전히 디코딩된 Lua 값을 보장합니다.
반환: any, error
비동기 결과
섹션 제목: “비동기 결과”페이로드는 일반적으로 비동기 함수 호출에서 수신됩니다:
local funcs = require("funcs")
local future, err = funcs.async("app.process:compute", input_data)if err then return nil, errend
-- 결과 대기local ch = future:response()local result_payload, ok = ch:receive()if not ok then return nil, errors.new("channel closed")end
-- 페이로드에서 데이터 추출local result, err = result_payload:data()if err then return nil, errend
print(result.computed_value)| 조건 | 종류 | 재시도 가능 |
|---|---|---|
| 트랜스코딩 실패 | errors.INTERNAL | 아니오 |
| 결과가 유효한 Lua 값이 아님 | errors.INTERNAL | 아니오 |
에러 처리는 에러 처리를 참조하세요.