Biblioteka medija
Biblioteka medija čuva slike, video snimke i dokumente vaše aplikacije, svaki na javnom URL-u. Proizvodi, varijante, prodajne lokacije i stranice upućuju na te URL-ove. Ovim endpointima nalazite fajlove, držite ih uređenim, menjate fajl novom verzijom a da mesta koja ga koriste ne prestanu da rade, i raščišćavate.
Kako biblioteka radi#
- Fajl ima ključ i URL. Ključ je putanja fajla u skladištu vaše aplikacije, na primer
12-34/products/dog-food.jpg; URL je adresa sa koje svako može da ga preuzme. Oba ostaju ista dok fajl postoji. - Folderi su za vas.
folderfajla je mesto gde je složen u biblioteci. Premeštanje ili preimenovanje menja samo to, nikad ključ ni URL, pa ništa što ga koristi ne prestaje da radi. - Slike se obrađuju posle otpremanja. Po pravilu otpremanja vaše aplikacije slike se kompresuju, često prebacuju u WebP i smanjuju u manje kopije koje zovemo renditions, svaku sa sopstvenim URL-om. To radi u pozadini ubrzo posle otpremanja, pa se
width,height,sizeirenditionspopunjavaju kasnije. Prebačen fajl zadržava originalnu ekstenziju u ključu. - Skriveni fajlovi se drže van uobičajenog prikaza biblioteke, na primer skenovi koje kupci otpremaju iz aplikacije. Liste ih izostavljaju osim ako ih ne tražite.
- Brisanje ide u dva koraka. Obrisan fajl ide u korpu i njegov URL i dalje radi. Trajno brisanje ga uklanja zauvek. Fajlovi koji ostanu u korpi trajno se brišu sami posle 30 dana, osim ako je vaša aplikacija drugačije podešena.
- Upotreba se prati. Gde god je URL fajla sačuvan, na proizvodu, varijanti, prodajnoj lokaciji ili stranici, mi to beležimo, pa vidite na šta bi izmena uticala.
Objekat fajla#
Ono što endpointi za liste vraćaju za svaki fajl.
| Polje | Opis |
|---|---|
| idinteger | Naš id fajla. |
| filenamestring | Naziv koji se prikazuje u biblioteci. |
| keystring | Putanja fajla u vašem skladištu. Pozivi za brisanje primaju nju. |
| urlstring | Javni URL. Posle zamene završava se sa ?v= i brojem verzije. |
| folderstring · može biti null | Ključ foldera, ili null za najviši nivo. |
| sizeinteger | Veličina u bajtovima. |
| mime, width, heightmože biti null | Vrsta i veličina u pikselima, posle obrade. |
| alt, captionstring · može biti null | Alternativni tekst i opis za prodavnicu. |
| tagsniz stringova | Vaše oznake. |
| descriptionstring · može biti null | Slobodan tekst dat pri otpremanju. |
| versioninteger | 1, i po jedan više za svaku zamenu. |
| renditionsniz objekata | Manje kopije: label, width, height, size, key, url. |
| usage_countinteger | Na koliko mesta se fajl koristi. |
| hidden, hidden_by, hidden_at, hidden_note | Da li je fajl skriven, i ko ga je sakrio, kada i zašto. |
| sourcestring · može biti null | Odakle fajl potiče, na primer admin ili app. |
| last_modified, inserted_atdatetime · ISO 8601, UTC | Kad je fajl poslednji put upisan i kad je dodat. Šalje se bez pomaka. |
Pregled fajlova#
Fajlovi vaše biblioteke, stranicu po stranicu, sa filterima za raščišćavanja koja najčešće radite: fajlovi koji se ne koriste, slike bez alternativnog teksta, veliki fajlovi.
Parametri upita
| Parametar | Opis |
|---|---|
| folderstring | Samo fajlovi direktno u ovom folderu, po njegovom ključu. / je najviši nivo. Izostavite ga za sve fajlove. |
| searchstring | Poredi se sa nazivom, alternativnim tekstom, opisom i oznakama. |
| kindstring | image, vector, video, audio ili doc. |
| unusedboolean | Samo fajlovi koje ništa ne koristi i koji su stariji od praga aplikacije za nekorišćene fajlove. |
| noaltboolean | Samo slike bez alternativnog teksta. |
| min_sizeinteger | Samo fajlovi od najmanje ovoliko bajtova. |
| since_daysinteger | Samo fajlovi upisani u poslednjih toliko dana. |
| hidden, hidden_onlyboolean | Uključi skrivene fajlove, ili prikaži samo njih. |
| orderBystring · podrazumevano name asc | name, size, inserted_at ili last_modified, iza čega ide asc ili desc. |
| pageNointeger · podrazumevano 1 | Stranica, od 1. |
| pageSizeinteger · podrazumevano 30 | Fajlova po stranici. |
Vraća
data.files: stranicu objekata fajlova. data.total_count: koliko fajlova odgovara. data.hidden_count: koliko ih je skriveno. Za razliku od većine lista, ova vam kaže ukupan broj.
Dva srodna čitanja: GET /cdn/folders vraća stablo foldera, svaki sa id, name, key, parent_cdn_folder_path, file_count, total_file_count (sa podfolderima) i svojim folders; pošaljite folder da biste počeli ispod jednog. GET /cdn/files/summary vraća broj fajlova po vrsti i zauzeto skladište, u bajtovima.
curl -G "https://api.morffeus.com/api/v2/cdn/files" \ -H "Authorization: Bearer $MORFFEUS_TOKEN" \ -d "folder=products" -d "kind=image" \ -d "noalt=true" -d "pageSize=50"
{
"data": {
"files": [
{
"id": 7731,
"filename": "dog-food.jpg",
"key": "12-34/products/dog-food.jpg",
"url": "https://cdn.example.com/12-34/products/dog-food.jpg",
"folder": "products",
"size": 84210,
"mime": "image/webp",
"width": 1600,
"height": 1600,
"alt": null,
"tags": [],
"version": 1,
"usage_count": 2,
"hidden": false,
"renditions": [
{
"label": "w800",
"width": 800,
"height": 800,
"url": "https://cdn.example.com/12-34/products/[email protected]",
…
}
],
…
}
],
"total_count": 138,
"hidden_count": 0
}
}
Izmena, premeštanje i slaganje#
Menja tekstove i vidljivost fajla. Nijedan od ovih poziva ne menja ključ ni URL fajla.
| Poziv | Opis |
|---|---|
| PATCH /cdn/file | Telo: id (obavezno) i bilo šta od alt, caption, tags (lista, ili string odvojen zarezima), name (prikazani naziv, koji mora biti slobodan u svom folderu), hidden i hidden_note. hidden: false ostavlja fajl vidljivim od tada. Vraća fajl, bez url. |
| PATCH /cdn/files/move | Telo: ids, lista id-jeva fajlova, i folder, ključ ciljnog foldera ("" ili / za najviši nivo). Folderi koji ne postoje se prave. Vraća po jedan rezultat za svaki id, sa success i message. |
| POST /cdn_folders | Pravi folder iz {"cdn_folder": {…}} sa name i key (oba obavezna), parent_cdn_folder_path, description. Vraća 201. |
| PATCH /cdn/folder | Preimenuje ili premešta folder. Telo: id (obavezno), name, parent_folder (ključ novog roditelja, "" za najviši nivo), description. Fajlovi u njemu se premeštaju sa njim. |
Greške
| Status | Kada |
|---|---|
| 404 | U vašoj aplikaciji nema takvog fajla ili foldera: API.CdnFiles.FileNotFound, API.CdnFolders.FolderNotFound. |
| 422 | Naziv ili ključ je zauzet: API.CdnFiles.KeyAlreadyExists, API.CdnFolders.KeyAlreadyExists. Novi roditelj ne postoji ili je unutar foldera: API.CdnFolders.ParentNotFound, API.CdnFolders.InvalidParent. |
curl -X PATCH "https://api.morffeus.com/api/v2/cdn/file" \ -H "Authorization: Bearer $MORFFEUS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "id": 7731, "alt": "Dog food, 2 kg bag", "tags": ["dog", "food"] }'
{
"errors": {
"CdnFiles": ["API.CdnFiles.FileNotFound"]
}
}
Zamena fajla#
Stavlja novi sadržaj pod isti ključ, pa svaki proizvod i stranica koji koriste fajl prikazuju novu verziju. Prethodni sadržaj se čuva kao verzija na koju možete da se vratite. Alternativni tekst, opis, oznake i vidljivost fajla ostaju kakvi jesu, a manje kopije se prave ponovo.
Parametri tela zahteva, kao multipart form data
| Parametar | Opis |
|---|---|
| fileobaveznofile | Novi sadržaj. |
| cache_strategyobaveznostring | Kako pregledači i CDN dobijaju novu verziju. version: URL koji vratimo završava se sa ?v= i verzijom; koristite ga gde prikazujete fajl. purge: brišemo kopije fajla i njegovih manjih kopija na CDN-u, a cache.purged kaže da li je uspelo; neka podešavanja to ne podržavaju. ttl: ništa se ne briše, a keševi preuzimaju izmenu kad im kopija istekne. |
Vraća
data: fajl, sa novom version. cache: strategy, url koji treba koristiti, i purged za strategiju purge.
| Srodan poziv | Opis |
|---|---|
| POST /cdn/files/{id}/revert | Vraća se na sačuvanu verziju. Telo: cache_strategy (obavezno) i version (podrazumevano: poslednja sačuvana). Sačuvane verzije ističu po rasporedu korpe. |
| POST /cdn/files/{id}/renditions/regenerate | Ponovo pravi manje kopije fajla, po želji sa novim širinama u renditions, na primer [1600, 800, 400]. Vraća 202: posao teče u pozadini. |
Greške
| Status | Kada |
|---|---|
| 400 | Nema fajla (API.CdnFiles.FileRequired), nepoznata strategija (API.CdnFiles.UnknownCacheStrategy), purge gde nije dostupan (API.CdnFiles.PurgeNotConfigured), ili fajl u korpi (API.CdnFiles.FileInTrash). |
| 404 | U vašoj aplikaciji nema takvog fajla, ili nema verzije na koju bi se vratili (API.CdnFiles.NoVersionToRevert). |
curl -X POST "https://api.morffeus.com/api/v2/cdn/files/7731/replace" \ -H "Authorization: Bearer $MORFFEUS_TOKEN" \ -F "file=@dog-food_new.jpg" \ -F "cache_strategy=version"
{
"data": {
"id": 7731,
"key": "12-34/products/dog-food.jpg",
"version": 2,
…
},
"cache": {
"strategy": "version",
"url": "https://cdn.example.com/12-34/products/dog-food.jpg?v=2"
}
}
Gde se fajl koristi#
Svako mesto koje čuva URL fajla. Proverite ga pre nego što fajl zamenite ili obrišete.
Parametri upita
| Parametar | Opis |
|---|---|
| offset, limitinteger · podrazumevano 0, 30 | Stranice. |
Vraća
data: po jedan unos za svaku upotrebu, sa entity_type i entity_id (na primer product i njegov id), field (kao images ili image_url), label (čitljiv naziv), url kako je sačuvan, i total_count, brojem upotreba. Fajl koji nije u vašoj aplikaciji vraća praznu listu.
GET /cdn/usages/broken daje suprotno: sačuvane URL-ove koji upućuju na fajl koji biblioteka više nema, sa istim poljima i parametrom search. Fajlovi u korpi se ne računaju kao pokvareni.
{
"data": [
{
"entity_type": "product",
"entity_id": 48377,
"field": "images",
"label": "Dog food",
"url": "https://cdn.example.com/12-34/products/dog-food.jpg",
"total_count": 2
},
{
"entity_type": "product_variant",
"entity_id": 91120,
"field": "image_url",
…
}
]
}
Brisanje, vraćanje i trajno brisanje#
Premešta fajl u korpu. Njegov URL radi dok se fajl trajno ne obriše, pa ništa ne prestaje da radi odmah. Pozivi za brisanje primaju key fajla; vraćanje i trajno brisanje primaju njegov id. Ulaze DELETE poziva šaljite u upitu: neki HTTP klijenti odbacuju telo DELETE zahteva.
| Poziv | Opis |
|---|---|
| DELETE /cdn?file= | Jedan fajl u korpu, po njegovom key. Fajl koji je već u korpi takođe vraća 200, a njegovo vreme u korpi se ne resetuje. |
| DELETE /cdn/list | Više fajlova: files, lista {"key": …}. Vraća po jedan rezultat za svaki fajl, sa success i message. |
| DELETE /cdn/folder?folder= | Folder po ključu: svaki fajl u njemu i njegovim podfolderima ide u korpu, a folderi se uklanjaju. Vraća deleted_files i deleted_folders. |
| GET /cdn/trash | Fajlovi u korpi, svaki sa deleted_at, deleted_by i purge_at, i total_count. Parametri: search, page_no, page_size (podrazumevano 30), order_by (podrazumevano deleted_at desc). Obratite pažnju na donje crte, za razliku od GET /cdn/files. |
| POST /cdn/files/{id}/restore | Vraća jedan fajl iz korpe, u njegov folder. POST /cdn/files/restore sa ids vraća više njih. |
| DELETE /cdn/files/{id}/purge | Trajno uklanja fajl iz korpe, sa manjim kopijama i sačuvanim verzijama. DELETE /cdn/files/purge sa ids uklanja više njih. Stranice koje još koriste URL tada se pojavljuju u GET /cdn/usages/broken. |
Vaša aplikacija može biti podešena da odbija brisanje fajlova koji se koriste; brisanje tada ne prolazi sa API.CdnFiles.FileReferenced.
Greške
| Status | Kada |
|---|---|
| 400 | Trajno brisanje fajla koji nije u korpi: API.CdnFiles.FileNotInTrash. Brisanje fajla koji se koristi, kad ga vaša aplikacija odbija: API.CdnFiles.FileReferenced. |
| 404 | U vašoj aplikaciji nema takvog fajla: API.CdnFiles.FileNotFound. |
| 422 | DELETE /cdn/folder bez foldera: API.CdnFolders.FolderRequired. |
curl -X DELETE -G "https://api.morffeus.com/api/v2/cdn" \ -H "Authorization: Bearer $MORFFEUS_TOKEN" \ --data-urlencode "file=12-34/products/dog_food_old.jpg"
{
"data": { "message": "File deleted", "success": true }
}
{
"errors": {
"CdnFiles": ["API.CdnFiles.FileNotInTrash"]
}
}
Slike na proizvodima i lokacijama#
Proizvodi, varijante i prodajne lokacije čuvaju URL-ove slika. Da biste koristili fajl iz biblioteke, pošaljite njegov url kao image_url u images proizvoda ili varijante preko POST /int/products. URL čuvamo onako kako ga pošaljete i ne preuzimamo ga, pa radi i URL van biblioteke, ali se ne prati. URL iz biblioteke se odmah računa kao upotreba fajla.
Ovde pomažu još dva čitanja. GET /cdn_upload_presets daje pravila otpremanja vaše aplikacije, sa izlaznim formatom, najvećom širinom, kvalitetom i širinama manjih kopija koje svako primenjuje; podrazumevano ima is_default: true. GET /cdn/files/pdf-renders?name= nalazi PDF-ove čije su stranice pretvorene u slike, sa URL-om svake stranice.
Povezano#
- Proizvodi: gde se postavljaju slike proizvoda i varijanti.
- Lokacije: prodajne lokacije i njihove slike.
- Greške: omotač greške.