0

私は何年にもわたって多数のiOSアプリを開発してきたので、ObjectiveCをかなりよく知っています。

最もプロセッサを集中的に使用する機能のいくつかをオフロードする最初のWebサービスを構築したいと思います。

私はMacをサーバーとして使用することに傾倒しています。サーバーにはApacheが付属しています。これを設定しましたが、正常に機能しているようです(MacのIPアドレスを入力して確認を受け取ることができます)。

今、私はサーバー側のWebサービスを構築する方法を決定しようとしています。これは私にとってまったく新しいことです。可能であれば、ObjectiveCの知識を活用したいと思います。私はObjectiveC互換のWebサービスエンジンと、それをブラウザやモバイルインターフェイスに接続する方法の例を探していると思います。私はデータベースとしてAmazonのSimpleDBを使用することに傾倒していました。

ところで:AppleにはLion Serverがあるようですが、これがオプションかどうかはわかりません。

任意の考え/推奨事項をいただければ幸いです。

4

1 に答える 1

0

thisthisなど、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)
于 2012-06-09T11:25:06.400 に答える