首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS网络API设计模式思路?

问iOS网络API设计模式思路?
EN

Stack Overflow用户
提问于 2016-01-13 19:11:05
回答 1查看 537关注 0票数 2

我有以下设计模式查询问题。我在PHP中有一个web服务,我想从中执行、登录授权和SQL操作,其中一些具有NSDictionary响应,有些具有BOOL响应。

我对设计模式进行了搜索,并点击了以下内容:Best architectural approaches for building iOS networking applications (REST clients)

虽然这篇文章很有趣,但我不认为我需要这么复杂的东西。我已经以assetDBConnection (在下面的代码中是self.delegate )的形式开始使用单例对象,但我不知道这是否是最好的主意。

我认为将assetDBConnection从APIWebRetrieve数据检索器中抽象出来的唯一方法是从响应中提取和比较字符串。这意味着将PHP级别的响应分组为类型,例如type=“登录”等。

代码语言:javascript
复制
-(void)APIWebRetrieveFinished:(APIWebRetrieve *)api
{
    NSLog(@"api:%@",[api description]);
    NSLog(@"%@",api.dataString);
    NSError *error;
    if (api.dataString) {
        NSDictionary *results=[NSJSONSerialization JSONObjectWithData:[api.dataString dataUsingEncoding:NSStringEncodingConversionAllowLossy]
                                    options:NSJSONReadingMutableContainers
                                      error:&error];

        if ([[results objectForKey:@"type"] isEqualToString:@"logon"]){
            if ([results objectForKey:@"response"]){
                [self.delegate loginOK];
            }else{
                [self.delegate loginFail];
            }
       }
    }
}

任何帮助都很感激。

更新: Ok,这一定很无聊。没有回复。我已经开始在其中添加另一个层,称为服务。我非常喜欢这样的事实,我现在有这样的代码弹出:

代码语言:javascript
复制
#import "AssetDBConnection.h"
#import "AssetDBServiceLogon.h"

@implementation AssetDBConnection

-(BOOL)loginWithUsername:(NSString*)user andPassword:(NSString*)password
{
    [AssetDBService logonWithUsername:user password:password andDelegate:self];
}

我只希望这是朝着正确的方向!

EN

回答 1

Stack Overflow用户

发布于 2016-02-09 11:26:06

Tumble杂草!

因此,我想我最好还是发表我自己的答案。也就是我所做的事情的实施细节。

有一个APIWebRetrieve类,它为所有微服务提供POST web调用(?)我不太确定这是正确的术语)例如GetAssetDetails,MoveAsset,CreateFaultForAsset。POST调用具有一个操作类型e.g.=“GetAssetDetails”,并将一个JSON对象(转换为NSDictionary)返回给GetAssetDetails对象,然后该对象返回与原始调用类型具有相同名称的键的数据内容。然后将其返回给AssetDBConnection Singleton,然后将其传回单例DBConnection类的委托。

我试着画这个..。

代码语言:javascript
复制
                     CallingViewController
                              |
                              |
                              |
  ------------AssetDBConnection (Singleton)-------------
  |            |          |         |                  |
GetAssetDetail  AssetFault   OtherMS  OtherMS           OtherMS  
Instance       Instance    Instance  Instance        Instance
  |              |              |         |              |
APIWebretrieve APIWebretrieve APIWeb....  APIWeb...   APIWeb...
Instance         Instance        Instance    Instance    Instance

\#字符基本上表示顶级类是较低级别的委托。

这个实现的效果如何?(在回答一个问题时,我会被击落)

好吧,不管是什么答案,这是myAnswer。

干杯

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34775090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档