Nhiều API, hoặc một API với tham số cho người dùng cho người dùng của chương trình


8

Giả sử bạn có một dịch vụ web, bổ sung logic nghiệp vụ trên đầu nguồn dữ liệu. Điều mà mỗi API của dịch vụ này trông khá giống - được đưa ra một tập các ràng buộc, đưa cho tôi các mục từ nguồn dữ liệu thỏa mãn các ràng buộc này. Bạn có thể nói rằng bạn nhận được "chế độ xem" nguồn dữ liệu từ API.

Bây giờ, theo thời gian bạn được yêu cầu trả lại các loại chế độ xem khác nhau đối với nguồn dữ liệu. Bạn có tùy chọn để thêm API mới cho mỗi chế độ xem "đủ khác biệt" hoặc để chuyển đổi bánh răng và cung cấp API getFooDataView (), lấy tham số chỉ định loại chế độ xem bạn muốn. Bạn có một số áp lực cạnh tranh để quyết định đi theo con đường nào:

  • Khách hàng lớn hiện tại của dịch vụ của bạn muốn lười biếng hơn và không phải mã hóa các API mới khi cần có chế độ xem mới đối với dữ liệu.
  • Tuy nhiên, một số tham số yêu cầu (ràng buộc) của bạn chỉ có ý nghĩa đối với một số chế độ xem chứ không phải cho các chế độ xem khác - bạn phải làm cho hợp đồng API của mình lỏng hơn bằng cách nói "tốt nếu bạn muốn xem XYZ, đặt tham số" foo "sẽ có không có tác dụng ", với tác dụng phụ đáng tiếc là bạn không thể biến" foo "thành một tham số bắt buộc ngay cả khi nó là như vậy đối với một số chế độ xem.
  • Ngày càng có nhiều trường hợp khách hàng mới muốn tận dụng dịch vụ của bạn. Bạn không thể quyết định cái nào sẽ gây nhầm lẫn hơn cho họ - phải chọn giữa các API khác nhau nhưng được xác định chặt chẽ hơn và một API nơi họ phải biết kết hợp tham số nào thực sự mang lại cho họ những gì họ muốn.

Để chắt lọc điều này, khi nào bạn vẽ một dòng rằng một cái gì đó phải là API của chính nó chứ không phải là một biến thể của một API hiện có? Những người khác nhau mà bạn phải làm việc có quan điểm khác nhau về những gì làm cho hai yêu cầu của khách hàng khác biệt về mặt ngữ nghĩa, do đó khó có thể thúc đẩy sự đồng thuận về vấn đề này. Bạn cũng muốn đảm bảo rằng dịch vụ của bạn không gây khó khăn cho khách hàng trong tương lai. Một số thực hành tốt nhất khơi dậy sự lựa chọn này là gì?

Câu trả lời:


4

Cá nhân tôi sẽ nghiêng về các API nhỏ hơn, chặt chẽ hơn. Tôi không nghĩ rằng việc tuân theo một API phù hợp với một kích thước sẽ giúp việc sử dụng đơn giản hơn - thực tế có lẽ là điều ngược lại vì bạn cần tìm ra sự kết hợp đúng đắn của "ju-ju" được gõ lỏng lẻo để có được những gì bạn muốn trong khi một API chặt chẽ hơn có thể được tự giải thích nhiều hơn. Bạn chỉ đang che giấu sự phức tạp thay vì làm cho nó rõ ràng.

Cũng có khả năng một API của bạn sẽ trở nên phức tạp hơn bao giờ hết vì nó bao bọc ngày càng nhiều chức năng hơn, trong khi các API chặt chẽ hơn vẫn tập trung và tinh gọn.

Điều này đánh vào Nguyên tắc phân chia giao diện ở quy mô lớn hơn.

Luôn có những cách khác (như hướng dẫn tốt) để giúp khách hàng chọn phương pháp phù hợp.


Tôi đồng ý về nguyên tắc, nhưng làm thế nào để bạn phiên bản API của bạn? Theo cách của bạn, bạn phải tạo giao diện mới khi chức năng được thêm hoặc bộ điều hợp. Theo cách của OP, bạn chỉ cần thêm một "lệnh" khác (tính nghiêm ngặt kỳ diệu của điều đó). Đó là API của OP sẽ chặt chẽ hơn, gọn gàng hơn và tập trung hơn, không phải của bạn.
Robert Harvey

1
Tôi không làm theo lý luận của bạn cho câu cuối cùng vì những lý do tôi đã đưa ra. Đối với phiên bản, SomeApiVersion1SomeApiVersion2... vv hoạt động kỳ diệu. Bằng cách này, bạn có toàn quyền kiểm soát di chuyển và khấu hao. Nhiều phiên bản trên cùng một giao diện có vẻ tốt vào Ngày 1, nhưng bạn sẽ phải trả giá trong một thời gian dài.
James World

Đó chắc chắn là một cách tiếp cận hợp lý, nhưng không có cách nào bạn có thể gọi nó là chặt chẽ, nạc hoặc tập trung. Bạn kết thúc với sự phát triển của các giao diện và bộ điều hợp.
Robert Harvey

2
Tôi đang gọi từng API chặt chẽ và tập trung, không phải toàn bộ. Tôi đang nói rằng độ phức tạp của toàn bộ là không đổi cho dù bạn có API phân chia hay không và mỗi khách hàng chỉ phải đảm nhận độ phức tạp họ cần với cách tiếp cận chia.
Thế giới James

2
Xem, tôi tin rằng đó là một ảo tưởng (xin lỗi cho ngôn ngữ mạnh mẽ). Sự phức tạp vẫn còn đó, nhưng bạn đã che giấu nó. Tôi đã thấy rằng biểu hiện hết lần này đến lần khác trong chi phí bảo trì tăng vọt. Đó là một con đường lửa chắc chắn đến một quả bóng lớn của kiến ​​trúc bùn.
Thế giới James
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.