Skip to main content

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:
  • validatePost kiểm tra một bài đăng mà không xuất bản nó.
  • validateMedia kiểm tra xem một URL media có truy cập được không.
  • generatePost là 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.
  • mediaUploadUrl là một mutation vì nó tạo một URL tải lên cho tài khoản của bạn.
  • linkAnalytics là một mutation vì nó có thể yêu cầu một báo cáo gửi qua email.
  • userBatch là một mutation vì nó khởi chạy một tác vụ xuất dữ liệu.
Hãy dùng Explorer hoặc schema để xác nhận gốc của từng thao tác được hỗ trợ.

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:
Input phản ánh endpoint đăng bài REST đã được tài liệu hóa, bao gồm các object tùy chọn theo từng mạng xã hội và các dạng REST chấp nhận nhiều hơn một cấu trúc JSON:
Một bài đăng có thể thành công trên một mạng xã hội và thất bại trên mạng khác. Đó không phải là request thất bại — xem Lỗi.

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:
Không phải "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ểu JSON 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ận 215 hoặ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ư post và 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ào type củ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ố.
Hãy truyền cùng giá trị mà bạn sẽ gửi trong body REST tương ứng. Một đối 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 scalar JSON 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ó:
Các kiểu phản hồi có kiểu như 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ữ:
  1. Yêu cầu một URL tải lên:
  2. Đọc data.mediaUploadUrl.uploadUrl, accessUrl và contentType từ JSON được trả về.
  3. PUT tệp của bạn trực tiếp đến uploadUrl, không phải đến Ayrshare API, đặt header Content-Type của request thành contentType được trả về.
  4. Sau khi tải lên thành công, truyền accessUrl vào createPost.input.mediaUrls:
Hãy coi 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.
  • 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.