ContentfulManagementAPI 0.10.1

ContentfulManagementAPI 0.10.1

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布最新发布2018年4月

Rouven WeßlingJP Wright 维护。



 
依赖关系
AFNetworking~> 3.1.0
ISO8601~> 0.6.0
 

contentful-management.objc

CI Status Version License Platform Coverage Status

Objective-C SDK,用于 Contentful 的内容管理 API。

Contentful 是一个用于 Web 应用程序、移动应用程序和联网设备的托管内容管理平台。它允许您在云端创建、编辑和管理内容,并通过强大的 API 将其发布到任何地方。Contentful 提供管理编辑团队和使组织之间协作的工具。

用法

客户端

最初应该创建 API 客户端实例

CMAClient* client = [[CMAClient alloc] initWithAccessToken:@"access-token"];

可以通过 管理 API 文档 轻松获得访问令牌。

或者,您可以选择自动处理 CMA 的速率限制,如下所示

CDAConfiguration* configuration = [CDAConfiguration defaultConfiguration];
configuration.rateLimiting = YES;

CMAClient* client = [[CMAClient alloc] initWithAccessToken:@"access-token" configuration:configuration];

这会使客户端执行带有退避的自动重试,因此您的应用程序无需处理速率限制

空间

检索所有空间

[client fetchAllSpacesWithSuccess:^(CDAResponse *response, CDAArray *array) {
	NSLog(@"%@", array);
} failure:^(CDAResponse *response, NSError *error) {
	NSLog(@"Error: %@", error);
}];

通过ID检索一个空间

[client fetchSpaceWithIdentifier:@"blog-space-id" 
success:^(CDAResponse *response, CMASpace *space) {
 	NSLog(@"%@", space);
} failure:^(CDAResponse *response, NSError *error) {
	NSLog(@"Error: %@", error);
}];

删除空间

[space deleteWithSuccess:^{
	NSLog(@"Delete successful.");
} failure:^(CDAResponse *response, NSError *error) {
	NSLog(@"Error: %@", error);
}];

创建空间

[client createSpaceWithName:@"MySpace"
success:^(CDAResponse *response, CMASpace *space) {
	NSLog(@"%@", space);
} failure:^(CDAResponse *response, NSError *error) {
	NSLog(@"Error: %@", error);
}];

或在组织的上下文中(如果您在您的帐户中拥有多个组织)

[client createSpaceWithName:@"MySpace"
inOrganization:organization
success:^(CDAResponse *response, CMASpace *space) {
	NSLog(@"%@", space);
} failure:^(CDAResponse *response, NSError *error) {
	NSLog(@"Error: %@", error);
}];

检索帐户中的所有组织

[client fetchOrganizationsWithSuccess:^(CDAResponse *response, CDAArray *array) {
	NSLog(@"%@", array);
} failure:^(CDAResponse *response, NSError *error) {
	NSLog(@"Error: %@", error);
}];

更新空间

space.name = @"new name";

[space updateWithSuccess:^{
	NSLog(@"%@", space);
} failure:^(CDAResponse *response, NSError *error) {
	NSLog(@"Error: %@", error);
}];

内容类型

从一个空间检索所有内容类型

[space fetchContentTypesWithSuccess:^(CDAResponse *response, CDAArray *array) {
	NSLog(@"%@", array);
} failure:^(CDAResponse *response, NSError *error) {
	NSLog(@"Error: %@", error);
}];

从一个空间通过ID检索一个内容类型

[space fetchContentTypeWithIdentifier:@"some identifier"
success:^(CDAResponse *response, CMAContentType *type) {
	NSLog(@"%@", type);
} failure:^(CDAResponse *response, NSError *error) {
	NSLog(@"Error: %@", error);
}];

为一个内容类型创建字段

CMAField* field = [CMAField fieldWithName:@"tags" type:CDAFieldTypeArray];
field.itemType = CDAFieldTypeSymbol;

[contentType addField:field];

[contentType addFieldWithName:@"anotherField" type:CDAFieldTypeNumber];

从内容类型中删除字段

[contentType deleteFieldWithIdentifier:@"some identifier"];

创建一个内容类型

[space createContentTypeWithName:@"foobar"
fields:@[ [CMAField fieldWithName:@"field1" type:CDAFieldTypeText],
		  [CMAField fieldWithName:@"field2" type:CDAFieldTypeNumber],
		  [CMAField fieldWithName:@"field3" type:CDAFieldTypeObject] ]
success:^(CDAResponse *response, CMAContentType *contentType) {
	NSLog(@"%@", contentType);
} failure:^(CDAResponse *response, NSError *error) {
	NSLog(@"Error: %@", error);
}];

删除内容类型

[contentType deleteWithSuccess:^{
	NSLog(@"Delete successful.");
} failure:^(CDAResponse *response, NSError *error) {
	NSLog(@"Error: %@", error);
}];

激活或停用内容类型

[contentType publishWithSuccess:^{
	NSLog(@"Published successfully.");
} failure:^(CDAResponse *response, NSError *error) {
	NSLog(@"Error: %@", error);
}];

[contentType unpublishWithSuccess:nil failure:nil];         

检查内容类型是否激活

BOOL result = contentType.isPublished;

更新内容类型

contentType.name = @"new name";
[contentType updateWithSuccess:^{
	NSLog(@"Updated successfully.");
} failure:^(CDAResponse *response, NSError *error) {
	NSLog(@"Error: %@", error);
}];

编辑界面

获取一个内容类型的编辑界面

[contentType fetchEditorInterfaceWithSuccess:^(CDAResponse* response, CMAEditorInterface* interface) { NSLog(@"编辑界面: %@", interface);

// Can be updated using this
[interface updateWithSuccess:^{}
	failure:^(CDAResponse* response, NSError* error) {
		NSLog(@"Error: %@", error);
}];

} failure:^(CDAResponse *response, NSError *error) { NSLog(@"错误: %@", error); }];

资产

从空间检索所有资产

[space fetchAssetsWithSuccess:^(CDAResponse* response, CDAArray* assets) {
	NSLog(@"%@", assets);
} failure:^(CDAResponse *response, NSError *error) {
	NSLog(@"Error: %@", error);
}];

通过ID检索一个资产

[space fetchAssetWithIdentifier:@"some identifier" 
success:^(CDAResponse* response, CMAAsset* asset) {
	NSLog(@"%@", asset);
} failure:^(CDAResponse *response, NSError *error) {
	NSLog(@"Error: %@", error);
}];

创建资产

[space createAssetWithTitle:@{ @"en-US": @"My Image" }
description:@{ @"en-US": @"My Image Description" }
fileToUpload:@{ @"en-US": @"http://www.example.com/example.jpg" }
success:^(CDAResponse *response, CMAAsset *asset) {
	NSLog(@"%@", asset);
} failure:^(CDAResponse *response, NSError *error) {
	NSLog(@"Error: %@", error);
}];

开始处理资产

[asset processWithSuccess:^{
    NSLog(@"Processing successfully started.");
} failure:^(CDAResponse *response, NSError *error) {
    NSLog(@"Error: %@", error);
}];

更新资产

asset.title = @"bar";

[asset updateWithSuccess:^{
	NSLog(@"Update successful");
} failure:^(CDAResponse *response, NSError *error) {
	NSLog(@"Error: %@", error);
}];

删除资产

[asset deleteWithSuccess:^{
	NSLog(@"Delete successful.");
} failure:^(CDAResponse *response, NSError *error) {
	NSLog(@"Error: %@", error);
}];

存档或恢复资产

[asset archiveWithSuccess:nil failure:nil];
[asset unarchiveWithSuccess:nil failure:nil];

检查资产是否存档

BOOL result = asset.isArchived;

发布或撤销发布资产

[asset publishWithSuccess:nil failure:nil];
[asset unpublishWithSuccess:nil failure:nil];

检查资产是否已发布

BOOL result = asset.isPublished;

条目

从空间检索所有条目

[space fetchEntriesWithSuccess:^(CDAResponse* response, CDAArray* entries) {
	NSLog(@"%@", entries);
} failure:^(CDAResponse *response, NSError *error) {
	NSLog(@"Error: %@", error);
}];

通过ID检索一个条目

[space fetchEntryWithIdentifier:@"some identifier"
success:^(CDAResponse* response, CDAEntry* entry) {
	NSLog(@"%@", entry);
} failure:^(CDAResponse *response, NSError *error) {
	NSLog(@"Error: %@", error);
}];

创建条目

[space createEntryOfContentType:contentType
withFields:@{ @"title": @{ @"en-US": @"Mr. President" } }
success:^(CDAResponse *response, CDAEntry *entry) {
	NSLog(@"%@", entry);
} failure:^(CDAResponse *response, NSError *error) {
	NSLog(@"Error: %@", error);
}];

更新条目

[entry setValue:@"bar" forFieldWithName:@"title"];
[entry updateWithSuccess:^{
	NSLog(@"Updated successfully");
} failure:^(CDAResponse *response, NSError *error) {
	NSLog(@"Error: %@", error);
}];

删除条目

[entry deleteWithSuccess:^{
	NSLog(@"Delete successful.");
} failure:^(CDAResponse *response, NSError *error) {
	NSLog(@"Error: %@", error);
}];

存档或恢复条目

[entry archiveWithSuccess:nil failure:nil];
[entry unarchiveWithSuccess:nil failure:nil];

检查条目是否存档

BOOL result = entry.isArchived;

发布或撤销发布条目

[entry publishWithSuccess:nil failure:nil];
[entry unpublishWithSuccess:nil failure:nil];

检查条目是否已发布

BOOL result = entry.isPublish;

角色和权限

创建一个角色

[space createRoleWithName:name
              description:description
              permissions:permissions
                 policies:policies
                  success:^(CDAResponse *response, CMARole *role) {
                    NSLog(@"New role: %@", role);
                  }
                  failure:^(CDAResponse *response, NSError *error) {
                    NSLog(@"Error: %@", error);
                  }];

检索空间中定义的角色

[space fetchRolesMatching:@{} withSuccess:nil failure:nil];

更新一个角色

role.roleDescription = @"New description";

[role updateWithSuccess:nil failure:nil];

删除一个角色

[role deleteWithSuccess:nil failure:nil];

Webhooks

创建新的webhook

[space createWebhookWithName:name
                         url:url
                      topics:nil
                     headers:nil
           httpBasicUsername:nil
           httpBasicPassword:nil
                     success:nil
                     failure:nil];

检索空间中所有webhook

[space fetchWebhooksWithSuccess:nil failure:nil];

更新webhook

webhook.name = @"updated name";
[webhook updateWithSuccess:nil failure:nil];

删除webhook

[webhook deleteWithSuccess:nil failure:nil];

(注:为了简洁,一些示例使用了nil完成块。显然,你不应在实际应用程序中这样做。)

安装

CocoaPods是Objective-C的依赖关系管理器,它自动简化了在项目中使用第三方库(如Contentful Delivery API)的过程。

platform :ios, '7.0'
pod 'ContentfulManagementAPI'

这是保持Contentful Management API副本更新最简单的方式。

或者,你可以使用iOS和OS X的预构建静态框架ContentfulManagementAPI-0.9.0.zip,其中包含了所有依赖项。或者将此存储库作为Git子模块包含,并包含Pod/目录中的所有代码。

单元测试

Contentful Management API完全经过单元测试。他们使用环境变量CONTENTFUL_MANAGEMENT_API_ACCESS_TOKEN中的API令牌,因此你必须提供该令牌。

可以从Xcode内部或使用cocoapods-testing从命令行运行测试。

$ gem install cocoapods-testing
$ pod lib testing

示例

您可以在我们的iOS网络研讨会演示应用中找到一个使用CMA的非常简单的示例,详见 演示应用

许可证

版权所有 (c) 2014 Contentful GmbH。有关详细信息,请参阅 LICENSE。