多年来,我开发了许多iOS应用程序,因此对Objective C相当了解。
我想构建我的第一个 Web 服务来卸载一些处理器密集型功能。
我倾向于使用我的Mac作为服务器,它随Apache一起提供。 我已经配置了它,它似乎可以正常工作(我可以输入 Mac 的 IP 地址并收到确认)。
现在我正在尝试决定如何构建服务器端 Web 服务,这对我来说是全新的。 如果可能的话,我想利用我的Objective C知识。 我想我正在寻找一个与 Objective C 兼容的 Web 服务引擎,以及一些如何将其连接到浏览器和移动界面的示例。 我倾向于使用亚马逊的SimpleDB作为数据库。
顺便说一句:我看到苹果有狮子服务器,但我无法确定这是否是一种选择。
任何想法/建议不胜感激。?
有一些用 ObjC 编写的简单 Web 服务器的例子,比如这个和这个。
也就是说,如果您不介意使用其他技术,可能会有"更好"的方法。 这是一个偏好问题;但是我已经使用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)