개요
Bluesky Facade는 BlueskyManager의 얇은 래퍼입니다. BlueskyManager는 여러 Agent를 관리하며, HasShortHand 트레이트가 자주 사용하는 메서드의 단축키를 한데 모아 제공합니다.
아키텍처
BlueskyServiceProvider는 Factory::class를 BlueskyManager로서 스코프 싱글톤(요청당 1개 인스턴스)으로 등록합니다.
getFacadeAccessor()가 이 바인딩을 해결합니다.
BlueskyManager의 코어 메서드
BlueskyManager 자체가 정의하는 코어 메서드는 다음과 같습니다. HasShortHand 트레이트의 메서드와 구분해서 파악해 두면 내부 구조 이해에 도움이 됩니다.
인증
Agent 조작
HTTP 클라이언트
유틸리티
HasShortHand 트레이트
HasShortHand 트레이트는 AT Protocol의 저수준 API를 PHP에 알맞은 이해하기 쉬운 메서드로 래핑합니다. BlueskyManager에 use HasShortHand;라고 기재하기만 하면, 이 메서드들을 Bluesky::에서 직접 호출할 수 있습니다.
HasShortHand를 독립된 트레이트로 만든 이유는 테스트·커스터마이즈의 용이성 때문입니다. 이 트레이트를 사용하면 BlueskyManager의 코드를 단순하게 유지하면서도 풍부한 API 단축키를 제공할 수 있습니다.게시·피드
인게이지먼트
팔로우
프로필·계정
미디어
알림
AT Protocol 레코드 조작
피드 제너레이터·라벨러
자주 사용하는 단축키 예시
게시하기
리플라이하기
리플라이는Post::build()로 부모 게시의 StrongRef를 설정합니다. HasShortHand에는 전용 reply() 메서드가 없고, post()에 Post 객체를 전달합니다.
좋아요·리포스트
프로필 갱신하기
upsertProfile()은 현재 프로필을 취득하고, 클로저 내에서 변경한 내용을 저장합니다. Profile 객체의 메서드를 사용해 displayName·description 등을 설정할 수 있습니다.
셀프 라벨 설정하기
SelfLabels를 사용해 계정 전체에 대해 셀프 라벨을 설정할 수 있습니다.
임의의 API를 직접 호출하기
HasShortHand에 없는 메서드는 send() 또는 client()를 사용합니다.
Facade 경유와 직접 이용의 차이
Bluesky::post()와 app(Factory::class)->post()는 동일한 BlueskyManager 인스턴스에 대한 조작입니다.
scoped 등록이므로 하나의 요청 내에서는 login() 이후의 세션 상태가 유지됩니다.
Conditionable과 Macroable
BlueskyManager는 Conditionable과 Macroable 트레이트도 사용합니다.
Conditionable: when() / unless()
Macroable: 커스텀 메서드 추가
macro()를 사용하면 애플리케이션 측에서 BlueskyManager에 메서드를 추가할 수 있습니다. AppServiceProvider의 boot() 안에서 정의하는 것이 일반적입니다.
커스텀 Agent 삽입
withAgent()를 사용하면 임의의 Agent 구현을 직접 설정할 수 있습니다.
일반적인 인증(
login() / withToken())을 사용하면 자동으로 에이전트가 설정되므로, withAgent()를 직접 사용하는 경우는 주로 테스트 시입니다.참고 링크
- 인증 방식 비교 — App Password와 OAuth의 상세
- Basic client — 인증 후 API 조작 예시
- 테스트 — Fake를 사용한 테스트 방법
- Source: src/BlueskyManager.php
- Source: src/HasShortHand.php