Bir web portalı için API arayüzü gibi ebay

1 Cevap php

Biz Kamera Hazır Sanat (www.camerareadyart.com) benzer Grafik İş Çalışma için bir B2B Web portal geliştirdik. Bu vektör Grafik, Logo Tasarımı vb renk, B / W görüntüleri boyama gibi genel görüntü işleme için bitmap dönüştürmek isteyen insanlar için hedeflenen

Biz insanlar (müşterilerimize), çalışmalarını yayınlamak için tam anlamıyla sitemizi ziyaret etmek zorunda kalmadan doğrudan kendi sitesinden işlerini göndermek sağlamak API bir dizi kullanın böylece tesis eklemek istiyorum.

Ben böyle bir şey uygulamak olarak nasıl hiçbir fikirleri yok bu yüzden ben bugüne kadar böyle bir şey yapmadım. Ben de sadece bu yetkili kim işlerini gönderebilir böylece biz güvenlik uygulamak nasıl bilmek istiyorum?

Herkes böyle bir şey yapmak nasıl olarak bana fikir verebilir.

1 Cevap

Bu soru çok geniş bir alanı kapsar ve ben tek bir cevabı ayrıntılı konularını kapsayacaktır şüpheliyim. Ne yapabilirim ben yapmış hataları dayalı bazı başlangıç ​​noktaları sunuyoruz.

Build on top of your own API
Don't add-in API features to an existing system. Doing so will:

  • Ek test yüküne neden (bağımsız app ve API hem de test etmek gerekir)
  • genel bakım maliyetlerinde bir artışa neden
  • size sunmak istiyorum ne daha kötü kalite API neden

Genel amaç öncelikle API oluşturmak ve sonra kendi API üstüne app inşa etmek olmalıdır. Aksi takdirde şu faydaları vardır:

  • API test doğal uygulamanızı test ederken yapılır
  • Eğer herhangi bir gerekli API yöntemleri eklemek için 'unutmak' olmaz

App ve uygulama mantığı (API) mantıksal olarak ayrılmış olacak - net bir denklemin her iki tarafı ne açısından aralarında ayrım ve ne için sorumlu olacak. Bu kılavuz gelişmesine yardımcı olacaktır. Bu da bu ihtiyaç olduğunda çok çok kolay gibi farklı makinelerde uygulaması ve API koymak ve sağlayacaktır.

Kendi API kullanarak çok önemli bir noktadır. Lütfen API tasarımı başlangıçta insanların aslında verimli bir şekilde ihtiyaç duyulan özellikler sunmak yapmak mümkün olacak sub-optimal ve sadece bunu kullanarak kendiniz yoluyla olacaktır.

Bunu kabaca şöyle bir sistem ile sona erecek:

-------------                          -------------
|           |                          |           |
| Your APP  | <= HTTP communication => | Your API  |
|           |                          |           |
-------------                          -------------

Bu biraz daha fazla faydaları vurgular: Eğer senin müşterilerine en iyi onlarla çalışmak şekillerde şeylerle uğraşmak için uygulamalar oluşturmak için izin, herhangi bir diğer uygulaması ile 'Sizin APP' değiştirebilirsiniz. Ayrıca mevcut API üstüne app yeni sürümlerini oluşturabilirsiniz - Genel web siteniz yeni sürümüne taşınıyor çok daha kolay olabilir.

Designing your URLs: mapping to classes and methods
Choosing sensible URLs is as much of a problem as choosing sensible class and method names. Deriving URLs from classes and their methods is a good approach. If there is no sensible correlation between URLs and classes/methods, you will find things harder to maintain in the long run.

Ben şahsen aşağıdaki şekillerde sınıflar ve yöntemler URL'leri ilişkilendirmek için tercih:

  • üst düzey dizinlere harita sınıfları
  • üst düzey dizin alt-dizinlere harita yöntemleri

Example:
The URL of your API is https://api.camerareadyart.com.
You have an image object with toColour() and toBlackAndWhite() methods.

: Bu, eşleme

https://api.camerareadyart.com/image/toColour/
https://api.camerareadyart.com/image/toBlackAndWhite/

Benzer vektör dönüşüm bitmap için:

https://api.camerareadyart.com/bitmap/toVector/

Designing responses
When someone GETs data from, or POSTs data to, one of your URLs, what happens? How are errors handled, how are exceptions dealt with? What form do responses take?

Ben burada ne söyleyemem. Şahsen ben mümkün olduğunca HTTP gibi yakından şeyleri harita ve gerektiğinde daha sonra sadece bu ötesine gitmeyi tercih ederim.

Gelen bir istek kabul edilir ve işlenir, fakat bir hata içine çalışır Örneğin, dahili bir 500 durum yanıt verileceği. Belirli bir API yöntemi sağlanmıştır değil kimlik doğrulaması gerektiriyorsa, aynı şekilde ben bazı şeyleri yeniden icat etmek zorunda engeller varolan HTTP özellikleri bir 403. Yararlanarak sorunu olabilir.

Use existing aspects of HTTP
As well as using HTTP status codes sensibly, make sure to look around for an HTTP-only method for doing something before rolling your own solution.

Tepki biçimi XML veya JSON tarafından gerektiği olmadığını kullanıcı belirtmek ister misiniz? HTTP başlığını kabul kullanın.

Bir isteğin sonucu kapmak için farklı bir URL'ye yeniden doğrudan bir istemci ister misiniz? HTTP Yer başlığını kullanın.

Zaten yapmak isteyebilirsiniz birçok şeyleri ele HTTP pek çok özellikleri vardır. Onları kullanın!

Security
There are two general problems to tackle here: authenticating the user, and determining what actions a given user can perform.

Security: authentication
The user will need to specify in their request who they are.

Akla bahar için ilk çözüm kullanıcı, onlar sizin app erişmek için kullandığınız kullanıcı adı ve parola gibi muhtemelen aynı kullanıcı adı ve şifre belirtmek için izin vermektir. Bu iyi bir fikir olarak yüzeyde görünüyor ama ideal değildir.

Kullanıcılar kendi uygulamalar içine kendi kullanıcı adı ve şifrenizi pişirme sona erecek. Onlar mutlu sürecinde kendi app kırma, app erişim böylece kaçınılmaz bir kullanıcı şifrelerini unutmak ve değişecektir.

Daha iyi bir seçim aslında çok bir arada bir kullanıcı adı ve şifre gibi bir kullanıcı için benzersiz bir tek değer olan bir kimlik doğrulama belirteci, tedarik kullanıcı için olacaktır.

Bu mantıksal API erişim bir kullanıcı adı ve parola ayrı sağlar. Bir kullanıcı olarak genellikle API erişimlerini koparmadan gibi app için kendi kullanıcı adı ve / veya şifrenizi değiştirebilirsiniz.

Bir kullanıcı aynı zamanda bir kullanıcı güvenli bir üçüncü taraf hizmeti için bir API belirteç vermek için izin, birden fazla API belirteçleri, farklı erişim seviyeleri ile her olabilir.

Security: access control
As far as the outside world is concerned, your API is a set of URLs. Each URL is, by definition, unique and performs a unique task. Basing your access control mechanisms around these concepts is a good starting point.

Ben bu belirteç erişimine izin verilen URL'leri, belirteci başına bir listesini tutmak için tercih. Belirli bir belirteç bir URL erişmek için kullanılan zaman o izin URL'lerin jetonun listesinde olup olmadığını erişilen ediliyor hangi URL söylemek saçmadır ve.

Her biri eşsiz URL eylemi gerçekleştirir akıllıca URL'lerin bir dizi seçerseniz almak için gidiyoruz gibi, bu işlem erişim kontrolü konusunda en iyi düzeyde sağlar.

Bir kontrol daha ince düzeyde vermek için de onlar kullanmak için izin ne sorgu argümanlar, bir belirteç erişmek için izin olduğunu URL başına belirtmek isteyebilirsiniz.