All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.leancloud.service.APIService Maven / Gradle / Ivy

package cn.leancloud.service;

import cn.leancloud.*;
import cn.leancloud.json.JSONObject;
import cn.leancloud.query.LCQueryResult;
import cn.leancloud.search.LCSearchResponse;
import cn.leancloud.sms.LCCaptchaDigest;
import cn.leancloud.sms.LCCaptchaValidateResult;
import cn.leancloud.types.LCDate;
import cn.leancloud.types.LCNull;
import cn.leancloud.upload.FileUploadToken;
import io.reactivex.Observable;
import retrofit2.Call;
import retrofit2.http.*;

import java.util.List;
import java.util.Map;

public interface APIService {
  String HEADER_KEY_LC_SESSIONTOKEN = "X-LC-Session";

  /**
   * Object Operations.
   */

  @GET("/1.1/classes/{className}")
  Observable> findObjects(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                                   @Path("className") String className);

  @GET("/1.1/classes/{className}")
  Observable queryObjects(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                         @Path("className") String className, @QueryMap Map query);

  @GET("/1.1/{endPoint}")
  Observable queryObjectsByCustomEndPoint(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                         @Path(value="endPoint", encoded = true) String endPoint, @QueryMap Map query);

  @GET("/1.1/cloudQuery")
  Observable cloudQuery(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                       @QueryMap Map query);

  @GET("/1.1/classes/{className}/{objectId}")
  Observable fetchObject(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                   @Path("className") String className, @Path("objectId") String objectId);

  @GET("/1.1/classes/{className}/{objectId}")
  Observable fetchObject(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                   @Path("className") String className, @Path("objectId") String objectId,
                                   @Query("include") String includeKeys);

  @POST("/1.1/classes/{className}")
  Observable createObject(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                    @Path("className") String className, @Body JSONObject object,
                                    @Query("fetchWhenSave") boolean fetchFlag,
                                    @Query("where") JSONObject where);

  @PUT("/1.1/classes/{className}/{objectId}")
  Observable updateObject(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                    @Path("className") String className, @Path("objectId") String objectId,
                                    @Body JSONObject object, @Query("fetchWhenSave") boolean fetchFlag,
                                    @Query("where") JSONObject where);

  @HTTP(method = "DELETE", path = "/1.1/classes/{className}/{objectId}", hasBody = true)
  Observable deleteObject(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                  @Path("className") String className, @Path("objectId") String objectId,
                                  @Body Map param);

  @POST("/1.1/batch")
  Observable>> batchCreate(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                                    @Body JSONObject param);

  /**
   * AVInstalltion methods.
   */

  @POST("/1.1/{endpointClass}")
  Observable saveWholeObject(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                       @Path("endpointClass") String endpointClass, @Body JSONObject object,
                                       @Query("fetchWhenSave") boolean fetchFlag,
                                       @Query("where") JSONObject where);
  @PUT("/1.1/{endpointClass}/{objectId}")
  Observable saveWholeObject(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                       @Path("endpointClass") String endpointClass, @Path("objectId") String objectId,
                                       @Body JSONObject object, @Query("fetchWhenSave") boolean fetchFlag,
                                       @Query("where") JSONObject where);
  @GET("/1.1/{endpointClass}/{objectId}")
  Observable getWholeObject(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                      @Path("endpointClass") String endpointClass, @Path("objectId") String objectId,
                                      @Query("include") String includeKeys);
  @HTTP(method = "DELETE", path = "/1.1/{endpointClass}/{objectId}", hasBody = true)
  Observable deleteWholeObject(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                       @Path("endpointClass") String endpointClass, @Path("objectId") String objectId,
                                       @Body Map param);

  /**
   * request format:
   *    requests: [unit, unit]
   * unit format:
   *    {"path":"/1.1/classes/{class}/{objectId}",
   *     "method":"PUT",
   *     "body":{"{field}":operationJson,
   *             "__internalId":"{objectId}",
   *             "__children":[]},
   *     "params":{}
   *    }
   * for update same field with multiple operations, we must use batchUpdate instead of batchSave,
   * otherwise, `__internalId` will become a common field of target instance.
   */
  @POST("/1.1/batch/save")
  Observable batchUpdate(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                     @Body JSONObject param);

  /**
   * Cloud Functions
   */
  @POST("/1.1/functions/{name}")
  Observable> cloudFunction(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                                @Path("name") String functionName, @Body Map param);

  @POST("/1.1/call/{name}")
  Observable> cloudRPC(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                           @Path("name") String functionName, @Body Object param);

  /**
   * File Operations.
   */

  @POST("/1.1/fileTokens")
  Observable createUploadToken(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                                @Body JSONObject fileData);

  @POST("/1.1/fileCallback")
  Call fileCallback(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                            @Body JSONObject result);

  @GET("/1.1/files/{objectId}")
  Observable fetchFile(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                               @Path("objectId") String objectId);

  @GET("/1.1/date")
  Observable currentTimeMillis();

  /**
   * Role Operations.
   */
  @POST("/1.1/roles")
  Observable createRole(@Body JSONObject object);

  /**
   * User Operations.
   */

  @POST("/1.1/users")
  Observable signup(@Body JSONObject object);
  @POST("/1.1/users")
  Observable signup(@Body JSONObject object, @Query("failOnNotExist") boolean failOnNotExist);
  @GET("/1.1/users")
  Observable queryUsers(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                       @QueryMap Map query);

  @POST("/1.1/users/friendshipRequests")
  Observable applyFriendship(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                       @Body JSONObject param);

  @PUT("/1.1/users/friendshipRequests/{requestId}/accept")
  Observable acceptFriendshipRequest(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                               @Path("requestId") String requestId,
                                               @Body JSONObject param);

  @PUT("/1.1/users/friendshipRequests/{requestId}/decline")
  Observable declineFriendshipRequest(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                                @Path("requestId") String requestId);

  @POST("/1.1/usersByMobilePhone")
  Observable signupByMobilePhone(@Body JSONObject object);

  @POST("/1.1/login")
  Observable login(@Body JSONObject object);

  @PUT("/1.1/users/{objectId}/updatePassword")
  Observable updatePassword(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                    @Path("objectId") String objectId, @Body JSONObject object);

  @GET("/1.1/users/me")
  Observable checkAuthenticated(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                        @QueryMap Map query);

  @PUT("/1.1/users/{objectId}/refreshSessionToken")
  Observable refreshSessionToken(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                         @Path("objectId") String objectId);

  @GET("/storage/1.1/users/tap-support/identity")
  Observable retrieveShortToken(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken);

  @POST("/1.1/requestPasswordReset")
  Observable requestResetPassword(@Body Map param);

  @POST("/1.1/requestPasswordResetBySmsCode")
  Observable requestResetPasswordBySmsCode(@Body Map param);

  @PUT("/1.1/resetPasswordBySmsCode/{smsCode}")
  Observable resetPasswordBySmsCode(@Path("smsCode") String smsCode, @Body Map param);

  @POST("/1.1/requestEmailVerify")
  Observable requestEmailVerify(@Body Map param);

  @POST("/1.1/requestMobilePhoneVerify")
  Observable requestMobilePhoneVerify(@Body Map param);

  @POST("/1.1/verifyMobilePhone/{verifyCode}")
  Observable verifyMobilePhone(@Path("verifyCode") String verifyCode, @Body Map param);

  @POST("/1.1/requestLoginSmsCode")
  Observable requestLoginSmsCode(@Body Map param);

  @POST("/1.1/users/{followee}/friendship/{follower}")
  Observable followUser(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                    @Path("followee") String followee, @Path("follower") String follower,
                                    @Body Map param);

  @PUT("/1.1/users/{followee}/friendship/{friendId}")
  Observable updateFriendship(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                            @Path("followee") String followee, @Path("friendId") String friendId,
                                            @Body Map param);

  @DELETE("/1.1/users/{followee}/friendship/{follower}")
  Observable unfollowUser(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                      @Path("followee") String followee, @Path("follower") String follower);

  @GET("/1.1/users/{userId}/followers")
  Observable getFollowers(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                        @Path("userId") String userId,
                                        @QueryMap Map query);

  @GET("/1.1/users/self/friends")
  Observable getFriends(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                        @QueryMap Map query);

  @GET("/1.1/users/{userId}/followersAndFollowees")
  Observable getFollowersAndFollowees(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                                  @Path("userId") String userId);

  /**
   * Status API
   */
  @POST("/1.1/statuses")
  Observable postStatus(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                  @Body Map param);

  @GET("/1.1/statuses/{statusId}")
  Observable fetchSingleStatus(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                         @Path("statusId") String statusId);

  @GET("/1.1/statuses")
  Observable fetchStatuses(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                          @QueryMap Map query);

  @DELETE("/1.1/statuses/{statusId}")
  Observable deleteStatus(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                  @Path("statusId") String statusId);

  @DELETE("/1.1/subscribe/statuses/inbox")
  Observable deleteInboxStatus(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                       @QueryMap Map query);

  @GET("/1.1/subscribe/statuses")
  Observable queryInbox(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                       @QueryMap Map query);

  @GET("/1.1/subscribe/statuses/count")
  Observable getInboxCount(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                       @QueryMap Map query);

  @POST("/1.1/subscribe/statuses/resetUnreadCount")
  Observable resetInboxUnreadCount(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken);


  /**
   * SMS / Capture requests
   */
  @GET("/1.1/requestCaptcha")
  Observable requestCaptcha(@QueryMap Map query);

  @POST("/1.1/verifyCaptcha")
  Observable verifyCaptcha(@Body Map param);

  @POST("/1.1/requestSmsCode")
  Observable requestSMSCode(@Body Map param);

  @POST("/1.1/verifySmsCode/{code}")
  Observable verifySMSCode(@Path("code") String code, @Body Map param);

  @POST("/1.1/requestChangePhoneNumber")
  Observable requestSMSCodeForUpdatingPhoneNumber(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                                          @Body Map param);

  @POST("/1.1/changePhoneNumber")
  Observable verifySMSCodeForUpdatingPhoneNumber(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                                         @Body Map param);

  /**
   * FullText Search API
   */
  @GET("/1.1/search/select")
  Observable search(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                      @QueryMap Map query);

  /**
   * Leaderboard API
   */
  @POST("/1.1/leaderboard/leaderboards")
  Observable createLeaderboard(@Body Map param);
  @GET("/1.1/leaderboard/leaderboards/{statisticName}")
  Observable fetchLeaderboard(@Path("statisticName") String name);
  @PUT("/1.1/leaderboard/leaderboards/{statisticName}")
  Observable updateLeaderboard(@Path("statisticName") String name, @Body Map param);
  @PUT("/1.1/leaderboard/leaderboards/{statisticName}/incrementVersion")
  Observable resetLeaderboard(@Path("statisticName") String name);
  @DELETE("/1.1/leaderboard/leaderboards/{statisticName}")
  Observable destroyLeaderboard(@Path("statisticName") String name);
  @POST("/1.1/leaderboard/users/self/statistics")
  Observable updateAuthenticatedUserStatistics(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                                           @Body List> param,
                                                           @Query("overwrite") int overwriteFlag);
  @POST("/1.1/leaderboard/users/{userId}/statistics")
  Observable updateUserStatistics(@Path("userId") String userId,
                                              @Body List> param,
                                              @Query("overwrite") int overwriteFlag);
  @POST("/1.1/leaderboard/entities/{entityId}/statistics")
  Observable updateEntityStatistics(@Path("entityId") String entityId,
                                                     @Body List> param,
                                                     @Query("overwrite") int overwriteFlag);
  @POST("/1.1/leaderboard/objects/{objectId}/statistics")
  Observable updateObjectStatistics(@Path("objectId") String objectId,
                                                     @Body List> param,
                                                     @Query("overwrite") int overwriteFlag);
  @GET("/1.1/leaderboard/users/{userId}/statistics")
  Observable getUserStatistics(@Path("userId") String userId, @Query("statistics") String statistics);
  @GET("/1.1/leaderboard/entities/{entityId}/statistics")
  Observable getEntityStatistics(@Path("entityId") String entityId, @Query("statistics") String statistics);
  @GET("/1.1/leaderboard/objects/{objectId}/statistics")
  Observable getObjectStatistics(@Path("objectId") String objectId, @Query("statistics") String statistics);

  @POST("/1.1/leaderboard/{memberType}/statistics/{statisticName}")
  Observable queryGroupStatistics(@Path("memberType") String memberType,
                                                     @Path("statisticName") String statisticName,
                                                     @Body Map param);

  @GET("/1.1/leaderboard/leaderboards/{memberType}/{statisticName}/ranks")
  Observable getLeaderboardResults(@Path("memberType") String memberType,
                                               @Path("statisticName") String statisticName,
                                               @QueryMap Map query);
  @GET("/1.1/leaderboard/leaderboards/{memberType}/{statisticName}/ranks/{entityId}")
  Observable getLeaderboardAroundResults(@Path("memberType") String memberType,
                                                     @Path("statisticName") String statisticName,
                                                     @Path("entityId") String entityId,
                                                     @QueryMap Map query);

  @POST("/1.1/leaderboard/leaderboards/{memberType}/{statisticName}/group/ranks")
  Observable queryLeaderboardGroupResults(@Path("memberType") String memberType,
                                                        @Path("statisticName") String statisticName,
                                                        @QueryMap Map query,
                                                        @Body Map data);

  @POST("/1.1/leaderboard/leaderboards/{memberType}/{statisticName}/group/ranks/{targetId}")
  Observable queryLeaderboardAroundInGroupResults(@Path("memberType") String memberType,
                                                               @Path("statisticName") String statisticName,
                                                               @Path("targetId") String targetId,
                                                               @QueryMap Map query,
                                                               @Body Map data);

  @GET("/1.1/leaderboard/users/self/statistics")
  Observable getAuthenticatedUserStatistics(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken);

  @GET("/1.1/users/strictlyQuery")
  Observable strictlyQueryUsers(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken,
                                       @QueryMap Map query);

  @POST("/1.1/users/self/friendBlocklist/{objectId}")
  Observable blockFriendByObjectId(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken, @Path("objectId") String objectId);
  
  @DELETE("/1.1/users/self/friendBlocklist/{objectId}")
  Observable unblockFriendByObjectId(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken, @Path("objectId") String objectId);
  
  @GET("/1.1/users/self/friendBlocklist")
  Observable getBlockListOfFriend(@Header(HEADER_KEY_LC_SESSIONTOKEN) String sessionToken, @QueryMap Map query);


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy