2008-12-13 40 views
11

Tôi có ứng dụng đường ray khá chuẩn và muốn có thể truy cập các hoạt động CRUD (Tạo, Cập nhật, Xóa) cơ bản cũng như các truy vấn tôi đã thêm từ ứng dụng iPhone. Rails cung cấp API REST cho các hoạt động này nhiều hơn hoặc ít hơn trong hộp.Cách tiếp cận tốt nhất để xây dựng ứng dụng khách iPhone cho ứng dụng đường ray là gì?

Cách tiếp cận tốt nhất để xử lý phần REST/XML trên iphone là gì và có bất kỳ thư viện C mục tiêu tốt nào thực hiện loại điều này không? Các hoạt động cũng sẽ cần được liên kết với một người dùng cụ thể (ví dụ: đã được xác thực).

Trả lời

13

Đây là một vấn đề thường gặp đối với tôi, đến nỗi tôi đã làm việc trên một cổng của khuôn khổ Rails ActiveResource gọi ObjectiveResource.

Chúng tôi đã có hai bản phát hành của dự án cho đến thời điểm này. 1.0 đã được sử dụng bởi một vài ứng dụng trong App Store và có thể xử lý việc xử lý tài nguyên to_xml và to_json mặc định được tích hợp trong Rails. 1.01 là bản phát hành lỗi và một bản nâng cấp.

Chúng tôi hiện đang làm việc để xác định tính năng được đặt cho 1.1. Chúng tôi have quite a few ideas đã và đang discussing more on the mailing list.

+0

âm thanh thú vị, tôi sẽ kiểm tra xem ra quá. – frankodwyer

+0

Tôi càng xem xét điều này, tôi càng thích nó. Hãy thử điều này trước. – frankodwyer

4

Đặt cược tốt nhất của bạn là viết một lớp trình bao bọc đơn giản xung quanh NSURLConnection để thiết lập nội dung cụ thể cho API của bạn. Nó không đặc biệt phức tạp và nó cho phép bạn điều chỉnh API của lớp của bạn trực tiếp đến API REST mà bạn đang nhắm mục tiêu. Lớp của bạn có thể có phương thức init như initWithMethod:delegate:params: trong đó đại biểu là đối tượng muốn nhận kết quả không đồng bộ và các tham số là một NSDictionary của tất cả các tham số. Bạn cũng có thể sử dụng thuộc tính trên lớp để thiết lập xác thực (hoặc có lớp khám phá và ghi lại chính nó sau khi bạn đăng nhập).

Để phân tích cú pháp XML, tôi khuyên bạn nên kiểm tra TouchXML.

2

Nếu bạn không thích phân tích cú pháp XML (và ai làm?) Và có thể định cấu hình chương trình phụ trợ để nhổ ra JSON thay vì XML, tôi khuyên bạn nên sử dụng thư viện như json-framework. Việc đọc dữ liệu vào các đối tượng dễ dàng hơn nhiều so với việc phân tích cú pháp thông qua các nút XML.

6

Tôi đã có một số may mắn sử dụng plists ...

Bạn sẽ cần phải cài đặt các viên ngọc plist-3.0.0 (gem install plist IIRC)

Sau đó, trong bộ điều khiển của bạn, bạn thiết lập một cái gì đó như thế này:

plist = {'a' => 'b', 'c' => 'd', 'e' => {'f' => 'g', 'h' => {'i' => 'j'}}}.to_plist 
render(:text => plist) 

Sau đó, trong iphone cài đặt ứng dụng một cái gì đó của bạn như thế này:

NSURL *url = [NSURL URLWithString:@"http://somewhere.com"]; 
NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
NSURLResponse *response; 
NSError *error; 
NSData *plistData; 
plistData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
NSPropertyListFormat format; 
NSString *errorStr; 
id imagesToRate = [NSPropertyListSerialization propertyListFromData:plistData mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&errorStr]; 
if(!imagesToRate) { 
    NSLog(errorStr); 
} else { 
    NSLog(@"%@", [imagesToRate objectForKey:@"e"]); 
} 

Bạn nhận được nhiều tự do sử dụng json (như trong, bạn không phải cuộn lược đồ xml của riêng bạn để định dạng dữ liệu của bạn, và tuần tự hóa dễ dàng như một cuộc gọi to_plist), sdk đi kèm với mã gốc xử lý plists.

Nhưng, nếu tất cả các bạn đã sẵn sàng có một web-dịch vụ mà kết quả đầu ra trong json/xml bạn có thể muốn giữ điều đó và chỉ phân tích những thứ trên iphone sử dụng các công cụ đã được đề cập (TouchXML, json-framework)

+0

nghe có vẻ thú vị vì tôi không muốn sử dụng XML trên điện thoại nếu tôi không phải ... có cách nào để chỉ định bạn muốn có kết quả plist khi đưa ra yêu cầu (như đường ray cho xml không?) . Hay bạn chỉ cần cung cấp một điểm cuối/tham số api khác để xác định rằng bạn muốn kết quả như một plist? – frankodwyer

+0

bạn có thể làm việc một số phép thuật với các tuyến đường để tinh chỉnh các url cho một hành động nhất định và buộc một định dạng cụ thể sau đó sử dụng responds_to đối phó trong bộ điều khiển. Hoặc, như bạn nói chỉ cần sử dụng một điểm cuối dành riêng cho các công cụ plist (thats những gì tôi làm) – diclophis

1

Hãy cẩn thận khi sử dụng NSURLConnection trên iPhone. Nó được biết là có rò rỉ bộ nhớ mà có thể sụp đổ một ứng dụng rất nhanh chóng. Nếu bạn đang thực hiện rất nhiều yêu cầu HTTP, đừng mong NSURLConnection hoạt động cho bạn. Tìm cái gì khác, có thể một số wrapper curl.

Các vấn đề liên quan