Skip to content
This repository was archived by the owner on Sep 15, 2025. It is now read-only.

Commit 13289c3

Browse files
authored
SPM Prep – Add @protocol defining REST GET and POST methods (#760)
2 parents 118fd9a + b65746d commit 13289c3

File tree

7 files changed

+63
-9
lines changed

7 files changed

+63
-9
lines changed

WordPressKit.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
3FFCC04B2BABA5220051D229 /* DateFormatter+WordPressComTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FFCC04A2BABA5220051D229 /* DateFormatter+WordPressComTests.swift */; };
7878
3FFCC04D2BABA6980051D229 /* NSDate+WordPressComTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FFCC04C2BABA6980051D229 /* NSDate+WordPressComTests.swift */; };
7979
3FFCC04F2BABA6E60051D229 /* Date+WordPressCom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FFCC04E2BABA6E60051D229 /* Date+WordPressCom.swift */; };
80+
3FFCC0572BABC7E00051D229 /* WordPressComRESTAPIInterfacing.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FFCC0552BABC78B0051D229 /* WordPressComRESTAPIInterfacing.h */; settings = {ATTRIBUTES = (Public, ); }; };
8081
40247DFA2120D8E100AE1C3C /* AutomatedTransferService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40247DF92120D8E100AE1C3C /* AutomatedTransferService.swift */; };
8182
40247DFC2120E69600AE1C3C /* AutomatedTransferStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40247DFB2120E69600AE1C3C /* AutomatedTransferStatus.swift */; };
8283
404057C5221B30400060250C /* StatsSearchTermTimeIntervalData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 404057C4221B30400060250C /* StatsSearchTermTimeIntervalData.swift */; };
@@ -808,6 +809,7 @@
808809
3FFCC04A2BABA5220051D229 /* DateFormatter+WordPressComTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DateFormatter+WordPressComTests.swift"; sourceTree = "<group>"; };
809810
3FFCC04C2BABA6980051D229 /* NSDate+WordPressComTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSDate+WordPressComTests.swift"; sourceTree = "<group>"; };
810811
3FFCC04E2BABA6E60051D229 /* Date+WordPressCom.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Date+WordPressCom.swift"; sourceTree = "<group>"; };
812+
3FFCC0552BABC78B0051D229 /* WordPressComRESTAPIInterfacing.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WordPressComRESTAPIInterfacing.h; sourceTree = "<group>"; };
811813
40247DF92120D8E100AE1C3C /* AutomatedTransferService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutomatedTransferService.swift; sourceTree = "<group>"; };
812814
40247DFB2120E69600AE1C3C /* AutomatedTransferStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutomatedTransferStatus.swift; sourceTree = "<group>"; };
813815
404057C4221B30400060250C /* StatsSearchTermTimeIntervalData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatsSearchTermTimeIntervalData.swift; sourceTree = "<group>"; };
@@ -2526,6 +2528,7 @@
25262528
93BD27731EE7388E002BB00B /* WordPressAPI */ = {
25272529
isa = PBXGroup;
25282530
children = (
2531+
3FFCC0552BABC78B0051D229 /* WordPressComRESTAPIInterfacing.h */,
25292532
4A05E7952B2FCB6400C25E3B /* NonceRetrieval.swift */,
25302533
4A05E7992B2FDC3200C25E3B /* WordPressOrgRestApi.swift */,
25312534
93BD27741EE73944002BB00B /* HTTPAuthenticationAlertController.swift */,
@@ -2811,6 +2814,7 @@
28112814
93BD276F1EE737A8002BB00B /* ServiceRemoteWordPressComREST.h in Headers */,
28122815
93BD273B1EE73282002BB00B /* AccountServiceRemote.h in Headers */,
28132816
93BD27691EE736A8002BB00B /* RemoteUser.h in Headers */,
2817+
3FFCC0572BABC7E00051D229 /* WordPressComRESTAPIInterfacing.h in Headers */,
28142818
74B5F0DC1EF829B800B411E7 /* BlogServiceRemote.h in Headers */,
28152819
74B5F0D71EF8299B00B411E7 /* BlogServiceRemoteREST.h in Headers */,
28162820
74B5F0E61EF8699C00B411E7 /* RemotePostType.h in Headers */,

WordPressKit/AccountServiceRemoteREST.m

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ - (void)getAccountDetailsWithSuccess:(void (^)(RemoteUser *remoteUser))success
5656
NSString *requestUrl = [self pathForEndpoint:@"me"
5757
withVersion:ServiceRemoteWordPressComRESTApiVersion_1_1];
5858

59-
[self.wordPressComRestApi GET:requestUrl
59+
[self.wordPressComRESTAPI get:requestUrl
6060
parameters:nil
6161
success:^(id responseObject, NSHTTPURLResponse *httpResponse) {
6262
if (!success) {
@@ -108,7 +108,7 @@ - (void)updateBlogsVisibility:(NSDictionary *)blogs
108108
};
109109
NSString *path = [self pathForEndpoint:@"me/sites"
110110
withVersion:ServiceRemoteWordPressComRESTApiVersion_1_1];
111-
[self.wordPressComRestApi POST:path
111+
[self.wordPressComRESTAPI post:path
112112
parameters:parameters
113113
success:^(id responseObject, NSHTTPURLResponse *httpResponse) {
114114
if (success) {
@@ -127,7 +127,7 @@ - (void)isPasswordlessAccount:(NSString *)identifier success:(void (^)(BOOL pass
127127

128128
NSString *path = [self pathForEndpoint:[NSString stringWithFormat:@"users/%@/auth-options", encodedIdentifier]
129129
withVersion:ServiceRemoteWordPressComRESTApiVersion_1_1];
130-
[self.wordPressComRestApi GET:path
130+
[self.wordPressComRESTAPI get:path
131131
parameters:nil
132132
success:^(id responseObject, NSHTTPURLResponse *httpResponse) {
133133
if (!success) {
@@ -149,7 +149,7 @@ - (void)isEmailAvailable:(NSString *)email success:(void (^)(BOOL available))suc
149149
static NSString * const errorEmailAddressInvalid = @"invalid";
150150
static NSString * const errorEmailAddressTaken = @"taken";
151151

152-
[self.wordPressComRestApi GET:@"is-available/email"
152+
[self.wordPressComRESTAPI get:@"is-available/email"
153153
parameters:@{ @"q": email, @"format": @"json"}
154154
success:^(id responseObject, NSHTTPURLResponse *httpResponse) {
155155
if ([responseObject isKindOfClass:[NSDictionary class]]) {
@@ -211,7 +211,7 @@ - (void)isUsernameAvailable:(NSString *)username
211211
success:(void (^)(BOOL available))success
212212
failure:(void (^)(NSError *error))failure
213213
{
214-
[self.wordPressComRestApi GET:@"is-available/username"
214+
[self.wordPressComRESTAPI get:@"is-available/username"
215215
parameters:@{ @"q": username, @"format": @"json"}
216216
success:^(id responseObject, NSHTTPURLResponse *httpResponse) {
217217
if (!success) {
@@ -317,7 +317,7 @@ - (void)requestWPComMagicLinkForEmail:(NSString *)email
317317
[params addEntriesFromDictionary:extraParams];
318318
}
319319

320-
[self.wordPressComRestApi POST:path
320+
[self.wordPressComRESTAPI post:path
321321
parameters:[NSDictionary dictionaryWithDictionary:params]
322322
success:^(id responseObject, NSHTTPURLResponse *httpResponse) {
323323
if (success) {
@@ -336,7 +336,7 @@ - (void)requestVerificationEmailWithSucccess:(void (^)(void))success
336336
NSString *path = [self pathForEndpoint:@"me/send-verification-email"
337337
withVersion:ServiceRemoteWordPressComRESTApiVersion_1_1];
338338

339-
[self.wordPressComRestApi POST:path parameters:nil success:^(id _Nonnull responseObject, NSHTTPURLResponse * _Nullable httpResponse) {
339+
[self.wordPressComRESTAPI post:path parameters:nil success:^(id _Nonnull responseObject, NSHTTPURLResponse * _Nullable httpResponse) {
340340
if (success) {
341341
success();
342342
}
@@ -355,7 +355,7 @@ - (void)getBlogsWithParameters:(NSDictionary *)parameters
355355
{
356356
NSString *requestUrl = [self pathForEndpoint:@"me/sites"
357357
withVersion:ServiceRemoteWordPressComRESTApiVersion_1_2];
358-
[self.wordPressComRestApi GET:requestUrl
358+
[self.wordPressComRESTAPI get:requestUrl
359359
parameters:parameters
360360
success:^(id responseObject, NSHTTPURLResponse *httpResponse) {
361361
if (success) {

WordPressKit/ServiceRemoteWordPressComREST.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#import <Foundation/Foundation.h>
2+
#import <WordPressKit/WordPressComRESTAPIInterfacing.h>
23

34
@class WordPressComRestApi;
45

@@ -23,6 +24,12 @@ NS_ASSUME_NONNULL_BEGIN
2324
*/
2425
@property (nonatomic, strong, readonly) WordPressComRestApi *wordPressComRestApi;
2526

27+
/**
28+
* @brief The interface to the WordPress.com API to use for performing REST requests.
29+
* This is meant to gradually replace `wordPressComRestApi`.
30+
*/
31+
@property (nonatomic, strong, readonly) id<WordPressComRESTAPIInterfacing> wordPressComRESTAPI;
32+
2633
/**
2734
* @brief Designated initializer.
2835
*

WordPressKit/ServiceRemoteWordPressComREST.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ - (instancetype)initWithWordPressComRestApi:(WordPressComRestApi *)wordPressComR
2626
self = [super init];
2727
if (self) {
2828
_wordPressComRestApi = wordPressComRestApi;
29+
_wordPressComRESTAPI = wordPressComRestApi;
2930
}
3031
return self;
3132
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
@import Foundation;
2+
3+
@protocol WordPressComRESTAPIInterfacing
4+
5+
- (void)get:(NSString * _Nonnull)URLString
6+
parameters:(NSDictionary<NSString *, NSObject *> * _Nullable)parameters
7+
success:(void (^ _Nonnull)(id _Nonnull, NSHTTPURLResponse * _Nullable))success
8+
failure:(void (^ _Nonnull)(NSError * _Nonnull, NSHTTPURLResponse * _Nullable))failure;
9+
10+
- (void)post:(NSString * _Nonnull)URLString
11+
parameters:(NSDictionary<NSString *, NSObject *> * _Nullable)parameters
12+
success:(void (^ _Nonnull)(id _Nonnull, NSHTTPURLResponse * _Nullable))success
13+
failure:(void (^ _Nonnull)(NSError * _Nonnull, NSHTTPURLResponse * _Nullable))failure;
14+
15+
@end

WordPressKit/WordPressComRestApi.swift

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -620,3 +620,30 @@ extension WordPressAPIError<WordPressComRestApiEndpointError> {
620620
return self as NSError
621621
}
622622
}
623+
624+
extension WordPressComRestApi: WordPressComRESTAPIInterfacing {
625+
626+
// A note on the naming: Even if defined as `GET` in Objective-C, then method gets converted to Swift as `get`.
627+
//
628+
// Also, there is no Objective-C direct equivalent of `AnyObject`, which here is used in `parameters: [String: AnyObject]?`.
629+
//
630+
// For those reasons, we can't immediately conform to `WordPressComRESTAPIInterfacing` and need instead to use this kind of wrapping.
631+
// The same applies for the other methods below.
632+
public func get(
633+
_ URLString: String,
634+
parameters: [String: NSObject]?,
635+
success: @escaping (Any, HTTPURLResponse?) -> Void,
636+
failure: @escaping (any Error, HTTPURLResponse?) -> Void
637+
) {
638+
GET(URLString, parameters: parameters, success: success, failure: failure)
639+
}
640+
641+
public func post(
642+
_ URLString: String,
643+
parameters: [String: NSObject]?,
644+
success: @escaping (Any, HTTPURLResponse?) -> Void,
645+
failure: @escaping (any Error, HTTPURLResponse?) -> Void
646+
) {
647+
POST(URLString, parameters: parameters, success: success, failure: failure)
648+
}
649+
}

WordPressKit/WordPressKit.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ FOUNDATION_EXPORT double WordPressKitVersionNumber;
66
//! Project version string for WordPressKit.
77
FOUNDATION_EXPORT const unsigned char WordPressKitVersionString[];
88

9-
// In this header, you should import all the public headers of your framework using statements like #import <WordPressKit/PublicHeader.h>
9+
#import <WordPressKit/WordPressComRESTAPIInterfacing.h>
1010
#import <WordPressKit/ServiceRemoteWordPressComREST.h>
1111
#import <WordPressKit/ServiceRemoteWordPressXMLRPC.h>
1212
#import <WordPressKit/SiteServiceRemoteWordPressComREST.h>

0 commit comments

Comments
 (0)