Tìm một thao tác
Schema là nguồn chính xác cho tập con GraphQL được hỗ trợ: các gốc thao tác, tên, đối số, kiểu input và giá trị enum. Phần mô tả cung cấp hướng dẫn sử dụng, và GraphQL Explorer hiển thị cả hai. Đối với các khả năng chỉ có trên REST, hãy dùng tài liệu tham khảo REST API. Tên thao tác đặt theo các endpoint REST mà chúng gọi tới, ở dạng camelCase.GET /history là postHistory, GET /analytics/social là socialAnalytics, POST /post là createPost.
Query để đọc, mutation để ghi
Query là các thao tác đọc và xác thực không thay đổi gì ở phía chúng tôi. Mutation xuất bản hoặc thay đổi trạng thái, khởi chạy công việc, hoặc gửi email. Cả HTTP verb của REST lẫn chi phí của một lệnh gọi đều không quyết định gốc:validatePostkiểm tra một bài đăng mà không xuất bản nó.validateMediakiểm tra xem một URL media có truy cập được không.generatePostlà một query vì không có gì thay đổi ở phía chúng tôi. Nó vẫn được tính là một lệnh gọi API và trả về văn bản khác nhau mỗi lần, vì vậy hãy đảm bảo bộ nhớ đệm phía client hoặc cơ chế tự động refetch không lặp lại nó mà bạn không hay biết.mediaUploadUrllà một mutation vì nó tạo một URL tải lên cho tài khoản của bạn.linkAnalyticslà một mutation vì nó có thể yêu cầu một báo cáo gửi qua email.userBatchlà một mutation vì nó khởi chạy một tác vụ xuất dữ liệu.
Tạo bài đăng
createPost nhận một đối số input duy nhất, vì vậy toàn bộ bài đăng là một object:
Kiểu đối số
Hầu hết đối số là chuỗi, số và boolean thông thường. Có ba trường hợp đáng lưu ý.Enum
Nhiều đối số chuỗi có tập giá trị hỗ trợ cố định là enum GraphQL, được viết không có dấu ngoặc kép và in hoa:"instagram". Server ánh xạ mỗi enum được chấp nhận sang đúng giá trị mà controller REST bên dưới mong đợi — thường, nhưng không phải luôn luôn, là một chuỗi chữ thường. Một enum không hợp lệ sẽ bị từ chối trong quá trình xác thực GraphQL trước khi thao tác chạy, vì vậy một lỗi đánh máy không tốn gì của bạn.
Một số đối số có cùng tên giữa các thao tác nhưng chấp nhận các giá trị khác nhau, vì các endpoint thực sự khác nhau. reviews(platform:) chỉ chấp nhận GMB và FACEBOOK, vì đó là những mạng xã hội duy nhất có đánh giá. Tính năng tự động hoàn thành của client sẽ hiển thị đúng tập giá trị cho từng thao tác.
Scalar JSON
Một vài đối số có kiểuJSON thay vì một kiểu cụ thể. Điều này xảy ra khi một giá trị thực sự có nhiều hơn một cấu trúc và không có kiểu GraphQL đơn lẻ nào có thể mô tả chính xác nó:
explainError(code:)chấp nhận215hoặc“215”, vì khách hàng lưu mã lỗi ở cả hai dạng.createPost(input:)dùng JSON cho các trường nhưpostvàmediaUrls, vốn có thể là giá trị dùng chung hoặc object theo từng nền tảng.createAutomation(triggers:, actions:)nhận các mảng mà trường của chúng phụ thuộc vàotypecủa từng phần tử.boostFacebookPost(interests:)chấp nhận id sở thích của Meta dưới dạng chuỗi hoặc số.
JSON không phải là lỗ hổng: resolver xác thực nó trước khi gửi đi, vì vậy một giá trị không hợp lệ sẽ trả về lỗi xác thực và không tiêu tốn lệnh gọi API nào.
Đối số tùy chọn và null
Đối với các đối số tùy chọn và các trường tùy chọn bên trong input object,null tường minh được chuẩn hóa thành bỏ qua. Các phần tử null bên trong danh sách được giữ nguyên khi kiểu danh sách cho phép.
Đọc phản hồi
Hầu hết các thao tác trả về một scalarJSON chứa toàn bộ envelope phản hồi REST, vì vậy hãy chọn trường gốc mà không có trường con. createPost hiện trả về PostResult có kiểu, vì vậy hãy chọn các trường của nó:
PostResult cũng bao gồm raw: JSON!, chứa toàn bộ phản hồi REST chưa được chỉnh sửa:
raw là cố định và tồn tại để một trường mới xuất hiện trong phản hồi REST không bao giờ bị không truy cập được từ GraphQL trong khi chúng tôi cập nhật kiểu cho nó. Nếu bạn cần thứ gì đó mà các trường có kiểu không cung cấp, hãy yêu cầu raw.
Tải media lên
Dữ liệu byte của media không thể truyền qua một request GraphQL. Một request GraphQL là một tài liệu JSON duy nhất có giới hạn 64 KB, vì vậy không có trường nào chấp nhận tệp, và việc mã hóa một hình ảnh dưới dạng base64 bên trong truy vấn sẽ vượt quá giới hạn đó với bất cứ thứ gì lớn hơn một ảnh thu nhỏ. Cách được hỗ trợ tránh hoàn toàn vấn đề này, và dù sao cũng nhanh hơn việc tải lên thông qua một API, vì dữ liệu của bạn đi thẳng vào bộ lưu trữ:-
Yêu cầu một URL tải lên:
-
Đọc
data.mediaUploadUrl.uploadUrl,accessUrlvàcontentTypetừ JSON được trả về. -
PUTtệp của bạn trực tiếp đếnuploadUrl, không phải đến Ayrshare API, đặt headerContent-Typecủa request thànhcontentTypeđược trả về. -
Sau khi tải lên thành công, truyền
accessUrlvàocreatePost.input.mediaUrls:
uploadUrl là một thông tin xác thực ghi có thời hạn ngắn và không ghi log hoặc để lộ nó. accessUrl là URL media được dùng khi tạo bài đăng.
Bạn cũng có thể tiếp tục sử dụng các endpoint tải lên REST và tham chiếu các URL thu được từ GraphQL. Hai giao diện dùng chung cùng một thư viện media.
Đọc tiếp
- Lỗi — mã trạng thái HTTP, cấu trúc lỗi và thành công một phần.
- Giới hạn và Tính phí — giới hạn kích thước truy vấn và cách tính số request.