2010-06-30 30 views
20

Tôi sẽ tạo một ứng dụng nội bộ cho iPhone và iPad sẽ theo dõi các cuộc gọi bán hàng, báo giá, ảnh và bản vẽ liên quan cho những dấu ngoặc kép đó. Tôi vẫn đang trong giai đoạn thiết kế khái niệm và tôi đang cố gắng đọc lên các cách khác nhau để giao tiếp giữa ứng dụng của tôi và webservice. Rõ ràng kể từ khi điều này sẽ được sử dụng chủ yếu qua 3G hoặc ... Edge Tôi muốn một giao thức hiệu quả vì vậy phản ứng ruột của tôi là tránh xa những thứ dựa trên XML như XML-RPC, hoặc SOAP. Tôi muốn sử dụng PHP và MySQL trên máy chủ và có kế hoạch sử dụng Core Data trên iOS.Loại webservice nào hoạt động tốt nhất với iOS?

Vì vậy, tôi có một vài câu hỏi cụ thể:

  1. chương trình gì tôi nên sử dụng để thực hiện?
  2. Tôi nên sử dụng lược đồ nào để làm việc dễ dàng trên máy chủ?
  3. Tôi nên sử dụng sơ đồ nào để dễ dàng làm việc trên iOS?
  4. Tôi nên sử dụng kế hoạch nào để xem xét toàn bộ dự án?
  5. Có sử dụng lược đồ dựa trên XML tốt hơn bất chấp phí trên mạng không? Tại sao?
+0

Tôi quan tâm như kết quả của cuộc thảo luận này, tôi sẽ phải đối mặt với tình huống tương tự khá sớm. – Webnet

+2

Nếu bạn định tránh XML, bạn có thể muốn điều tra [JSON] (http://en.wikipedia.org/wiki/JSON). Có [thư viện] (http://code.google.com/p/json-framework/) để xử lý JSON trong Objective-C. – JoeGaggler

+0

Tôi không có ý định tránh XML, trên thực tế từ việc đọc tôi đã thực hiện tôi thích RPC-XML tuy nhiên tôi biết nó sẽ chi phí băng thông. Vì vậy, tôi quan tâm để xem liệu chi phí có đáng sử dụng XML cũng như loại lược đồ nào là tốt nhất và hay dễ nhất. – jamone

Trả lời

39

Với cách bạn đã hỏi nhiều câu hỏi, bạn có thể nhận ra rằng giải pháp tối ưu bạn sử dụng sẽ là hành động cân bằng giữa các mục tiêu cạnh tranh.

1: Bạn cần xác định "hiệu suất" tốt hơn. Tôi giả sử bạn đang đề cập đến thời gian truyền mạng có nghĩa là giữ độ trễ của máy chủ thấp và số byte truyền thấp. Cuối cùng có lẽ là một giao thức dây nhị phân tùy chỉnh cũng được phân tích về tính nén và nén được áp dụng khi thích hợp (ví dụ: chuỗi hoặc chuỗi lặp lại). Nhược điểm của giao thức này là khó có thể mã hóa trên cả máy khách & vì bạn sẽ không thể sử dụng hỗ trợ SDK cho mã hóa được tiêu chuẩn hóa và trừ khi các giao thức nhị phân được thiết kế chu đáo có xu hướng giòn để hỗ trợ các thay đổi trong tương lai và tiện ích mở rộng cho ứng dụng của bạn. Ngoài ra, bạn nên cân nhắc cách xác định giao dịch của giao thức, ngay cả với mã hóa hiệu quả nếu giao thức của bạn yêu cầu nhiều chuyến đi khứ hồi so với một chuyến đi khứ hồi duy nhất bạn vẫn sẽ bị chậm.

Cuối cùng tùy thuộc vào kích thước dữ liệu bạn đang gửi, chi phí của mã hóa có thể không quan trọng so với kích thước của dữ liệu.

Tôi khuyên bạn nên gắn với định dạng mã hóa được chuẩn hóa có thể được phân tích cú pháp với hỗ trợ thư viện, trường này thu hẹp trường thành hai ngữ pháp chính: XML hoặc JSON.

2: XML và JSON đều được hỗ trợ tốt trong khung máy chủ. Khi sử dụng các dịch vụ XML, tôi khuyên bạn nên sử dụng mẫu kiểu REST vì chúng thường dễ xây dựng và bạn không phải tuân thủ ứng dụng của mình theo phong cách của người khác.

Tôi sẽ tránh xa các dịch vụ web dựa trên SOAP mặc dù việc xây dựng chúng có thể được hỗ trợ tốt (đặc biệt là trên nền tảng Windows), vì sự phức tạp của việc phân tích cú pháp dựa trên SOAP trên máy khách di động cao và không được hỗ trợ tốt đó. Tôi không tìm thấy serialization đối tượng được tạo tự động bởi các trình biên dịch WSDL để có thể giành được nhiều thời gian khi viết mã, thường là khá dễ dàng để tuần tự hóa thành một kiểu REST kiểu REST hoặc thậm chí đơn giản hơn cho JSON.

3: iOS hỗ trợ trình phân tích cú pháp XML kiểu SAX tích hợp và có nhiều thư viện lớp có sẵn hỗ trợ triển khai DOM trong bộ nhớ với các tính năng và tốc độ khác nhau. Chọn một trong những tốt nhất cho nhu cầu của bạn.Cá nhân tôi thích TBXML nhanh, khá nhẹ và dễ lập trình, nhưng vì nó không hợp lệ hóa các lược đồ và nó là một cây trong bộ nhớ, nên nó không thích hợp trong một số trường hợp. Here is a shootout hiệu suất thư viện XML của iOS.

Có một số thư viện JSON có sẵn cho iOS nếu bạn sử dụng Google. Hoặc look in this answer.

SOAP không được hỗ trợ tốt và có nhiều lựa chọn thư viện hạn chế. Bạn luôn có thể phân tích cú pháp các phản hồi SOAP được tạo ra bởi một máy chủ nhưng nó dễ vỡ đối với các thay đổi phía máy chủ là SOAP hợp pháp (ví dụ các tiền tố không gian tên khác nhau) có thể phá vỡ trình phân tích cú pháp XML được mã hóa cứng.

4: Khó trả lời mà không cần biết thêm chi tiết về dự án của bạn, nhưng tôi muốn sử dụng mã hóa dựa trên XML đơn giản hoặc JSON vì cả hai đều dễ dàng lập trình trên máy khách và máy chủ. hiệu quả hợp lý trên dây và có khả năng mở rộng cho các lần lặp lại ứng dụng trong tương lai.

JSON có lợi thế khi phân tích cú pháp đơn giản hơn, có thể ít phức tạp hơn và cũng có thể dễ dàng thực hiện lại các mục đích khác, chẳng hạn như xây dựng ứng dụng web Ajax trên các dịch vụ của bạn.

5: XML và JSON so với các mã hóa khác? Tôi nghĩ đây là sở thích cá nhân. XML có thể tự mô tả nhiều hơn JSON nhưng có nhiều khả năng phân tích cú pháp hơn. JSON có thể có chi phí thấp hơn trong byte thô và dễ phân tích cú pháp. Một lần nữa, chi phí mã hóa có thể đáng kể hoặc có thể không đáng kể tùy thuộc vào kích thước nội dung của bạn. Ngoài ra, bạn có thể áp dụng nén bên ngoài trong mọi trường hợp.

+1

Câu trả lời rất hoàn chỉnh với lời khuyên tuyệt vời. – rpetrich

+0

Wow, đó là một câu trả lời hoàn chỉnh. Bạn không thấy nhiều thứ được làm rất tốt. Cảm ơn. Tôi nghĩ rằng nó dựa trên JSON so với XML, tôi đã thực hiện phân tích cú pháp XML trên iphone trước và vì vậy tôi biết làm thế nào mà đi, tôi nghĩ rằng tôi sẽ thử một ứng dụng thử nghiệm đơn giản để so sánh JSON vs XMl, và có nó so sánh hiệu suất với dữ liệu thực tế của tôi. Điều này sẽ cho tôi một cơ hội để thử làm việc với phân tích JSON và xem cái nào tôi thích nhất. Tôi nhận ra một định dạng nhị phân tùy chỉnh nhỏ hơn, nhưng tôi muốn tuân theo các tiêu chuẩn. Cảm ơn một lần nữa. – jamone

+2

Sau khi thử nghiệm một chút, tôi quyết định đi với JSON, sử dụng phần vững JSON từ 'http: // code.google.com/p/json-framework /' Nó rất đơn giản để sử dụng cả phía máy khách lẫn phía máy chủ. – jamone

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