0

多年来,我开发了许多 iOS 应用程序,因此对 Objective C 相当了解。

我想构建我的第一个 Web 服务来卸载一些处理器最密集的功能。

我倾向于使用我的 Mac 作为 Apache 附带的服务器。我已经配置了它,它似乎可以正常工作(我可以输入 Mac 的 IP 地址并收到确认)。

现在我正在尝试决定如何构建服务器端 Web 服务,这对我来说是全新的。如果可能的话,我想利用我的 Objective C 知识。我想我正在寻找一个与 Objective C 兼容的 Web 服务引擎以及一些如何将其连接到浏览器和移动界面的示例。我倾向于使用亚马逊的 SimpleDB 作为数据库。

顺便说一句:我看到 Apple 有 Lion Server,但如果这是一个选项,我无法确定。

任何想法/建议表示赞赏。?

4

1 回答 1

0

有一些用 ObjC 编写的简单 Web 服务器示例,例如thisthis

也就是说,如果您不介意使用其他技术,可能会有“更好”的方法来做到这一点。这是一个偏好问题;但我使用 Python、MySQL 和优秀的web.py框架来处理这些类型的后端。

例如,这里是一个使用所描述的技术组合的示例 Web 服务(省略了一些冗余......)。我只是在我的服务器上运行它,它负责 url 重定向并从数据库提供 JSON。

import web
import json
import MySQLdb

urls = (
    "/equip/gruppo", "gruppo",  # GET = get all gruppos, # POST = save gruppo
    "/equip/frame", "frame"
)

class StatusCode:
    (Success,SuccessNoRows,FailConnect,FailQuery,FailMissingParam,FailOther) = range(6);

#   top-level class that handles db interaction
class APIObject:
    def __init__(self):
        self.object_dict = {}       # top-level dictionary to be turned into JSON
        self.rows = []
        self.cursor = ""
        self.conn = ""

    def dbConnect(self):
        try:
            self.conn = MySQLdb.connect( host = 'localhost', user = 'my_api_user', passwd = 'api_user_pw', db = 'my_db')
            self.cursor = self.conn.cursor(MySQLdb.cursors.DictCursor)
        except:
            self.object_dict['api_status'] = StatusCode.FailConnect
            return False
        else:
            return True

    def queryExecute(self,query):
        try:
            self.cursor.execute(query)
            self.rows = self.cursor.fetchall()
        except:
            self.object_dict['api_status'] = StatusCode.FailQuery
            return False
        else:
            return True

class gruppo(APIObject):
    def GET(self):
        web.header('Content-Type', 'application/json')
        if self.dbConnect() == False:
            return json.dumps(self.object_dict,sort_keys=True, indent=4)
        else:
            if self.queryExecute("SELECT * FROM gruppos") == False:
                return json.dumps(self.object_dict,sort_keys=True, indent=4)
            else:
                self.object_dict['api_status'] =  StatusCode.SuccessNoRows if self.rows.count == 0 else StatusCode.Success

                data_list = []
                for row in self.rows:
                    # create a dictionary with the required elements
                    d = {}
                    d['id'] = row['id']
                    d['maker'] = row['maker_name']
                    d['type'] = row['type_name']
                    # append to the object list
                    data_list.append(d)
                self.object_dict['data'] = data_list
                # return to the client
                return json.dumps(self.object_dict,sort_keys=True, indent=4)
于 2012-06-09T11:25:06.400 回答