Partkeepr: v1.2.0μ—μ„œ Octopart μ„€μ • 문제

에 λ§Œλ“  2017λ…„ 02μ›” 16일  Β·  11μ½”λ©˜νŠΈ  Β·  좜처: partkeepr/PartKeepr

μ‹œμŠ€ν…œ 정보

  • PartKeepr 버전: v1.2.0
  • 데λͺ¨ μ‹œμŠ€ν…œμ—μ„œ μž¬ν˜„ κ°€λŠ₯: μ•„λ‹ˆμš”(데λͺ¨ μ‹œμŠ€ν…œμ—μ„œ ꡬ성을 μˆ˜μ •ν•  수 μžˆλŠ” λŠ₯λ ₯이 μ—†κ³  Octopart 톡합이 μž‘λ™ν•˜λŠ” κ²ƒμœΌλ‘œ λ³΄μ΄λ―€λ‘œ)

λ²ˆμ‹ 방법

Octopart API ν‚€κ°€ μ‹œμŠ€ν…œμ— ν‘Έμ‹œλ˜λŠ” 방식에 λŒ€ν•΄ 맀우 μ œν•œμ μœΌλ‘œ μ΄ν•΄ν•˜κ³  μžˆμœΌλ―€λ‘œ 이 글을 μž‘μ„±ν•˜λ©΄μ„œ λͺ‡ 가지 가정을 ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€(μΌλΆ€λŠ” μ •ν™•ν•˜μ§€ μ•Šμ„ 수 있음). μ–‘ν•΄ν•΄ μ£Όμ‹­μ‹œμ˜€. λ˜ν•œ 이 버그 λ³΄κ³ μ„œμ—μ„œ μ‹€μ œ Octopart API ν‚€ λŒ€μ‹  'xxxxxxxx'λ₯Ό μ‚¬μš©ν•  κ²ƒμž…λ‹ˆλ‹€.

PartKeepr v1.2.0 μ„€μΉ˜λ₯Ό μœ„ν•΄ Octopart 지원을 μ„€μ •ν•˜λ €κ³  μ‹œλ„ν•˜λŠ” λ™μ•ˆ λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” λ‹¨μˆœνžˆ parameters.php νŒŒμΌμ—μ„œ Octopart API 속성을 μ„€μ •ν•˜λΌλŠ” app/config/parameters.php.dist의 지침을 따라 μ‹œμž‘ν–ˆμŠ΅λ‹ˆλ‹€.

$container->setParameter('partkeepr.octopart.apikey', 'xxxxxxxx')`

μ΄λ ‡κ²Œ 해도 아무 νš¨κ³Όκ°€ μ—†λŠ” 것 κ°™μ•˜κ³  PartKeeprμ—μ„œ Octopart 지원을 ν™œμ„±ν™”ν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. κ²°κ΅­ μ›Ή/섀정을 λ‹€μ‹œ μ‹€ν–‰ν–ˆλŠ”λ° "κΈ°μ‘΄ ꡬ성 검색" λ‹¨κ³„μ—μ„œ "잘λͺ»λœ 인증 ν‚€"λΌλŠ” 였λ₯˜ λ©”μ‹œμ§€μ™€ ν•¨κ»˜ μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€. λ³€λ•μŠ€λŸ½κ²Œ λ‚˜λŠ” partkeepr.octopart.apikey 속성을 λ‹€μŒκ³Ό 같이 μ„€μ •ν–ˆμŠ΅λ‹ˆλ‹€.

$container->setParameter('partkeepr.octopart.apikey', 'https://octopart.com/api/v3/parts/match?apikey='xxxxxxxx')`

그런 λ‹€μŒ μ›Ή/μ„€μ • 도ꡬλ₯Ό λ‹€μ‹œ μ‹€ν–‰ν•˜μ—¬ 였λ₯˜ 없이 "κΈ°μ‘΄ ꡬ성 검색" 단계λ₯Ό μ„±κ³΅μ μœΌλ‘œ 톡과할 수 μžˆμ—ˆκ³  λ‚˜λ¨Έμ§€ μ„€μ • ν”„λ‘œμ„ΈμŠ€λ₯Ό μ„±κ³΅μ μœΌλ‘œ 계속할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ PartKeepr에 λ‹€μ‹œ λ‘œκ·ΈμΈν•˜μ—¬ ν•­λͺ©μ— λŒ€ν•œ μ„ΈλΆ€ 정보 창을 ν‘œμ‹œν•˜κ³  Octopart λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄ Octopart 창이 λ‚˜νƒ€λ‚˜μ§€λ§Œ μ™„μ „νžˆ λΉ„μ–΄ μžˆμŠ΅λ‹ˆλ‹€(UI에 였λ₯˜ λ©”μ‹œμ§€κ°€ ν‘œμ‹œλ˜μ§€ μ•ŠμŒμ— 유의). partkeepr에 λŒ€ν•œ κ°„λž΅ν•œ μ‚΄νŽ΄λ³΄κΈ°. λ‘œκ·Έμ— λ‹€μŒ 였λ₯˜κ°€ ν‘œμ‹œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

request.CRITICAL: Uncaught PHP Exception Guzzle\Http\Exception\ClientErrorResponseException: "Client error response [status code] 401 [reason phrase] Unauthorized [url] http://octopart.com/api/v3/parts/search?apikey=https%3A%2F%2Foctopart.com%2Fapi%2Fv3%2Fparts%2Fmatch%3Fapikey%3Dxxxxxxxx&q=STD950BLK&start=0&include%5B0%5D=short_description&include%5B1%5D=specs&include%5B2%5D=datasheets&limit=20" at /var/www/partkeepr.domain.com/vendor/guzzle/guzzle/src/Guzzle/Http/Exception/BadResponseException.php line 43 {"exception":"[object] (Guzzle\\Http\\Exception\\ClientErrorResponseException(code: 0): Client error response\n[status code] 401\n[reason phrase] Unauthorized\n[url] http://octopart.com/api/v3/parts/search?apikey=https%3A%2F%2Foctopart.com%2Fapi%2Fv3%2Fparts%2Fmatch%3Fapikey%3Dxxxxxxxx&q=STD950BLK&start=0&include%5B0%5D=short_description&include%5B1%5D=specs&include%5B2%5D=datasheets&limit=20 at /var/www/partkeepr.domain.com/vendor/guzzle/guzzle/src/Guzzle/Http/Exception/BadResponseException.php:43)"} []

μœ„μ˜ 둜그 λ©”μ‹œμ§€μ—μ„œ λ¬Έμ œλŠ” μ›Ή/μ„€μ •μ˜ apikey 확인/검증에 λ¬Έμ œκ°€ μžˆλŠ” κ²ƒμœΌλ‘œ λ³΄μž…λ‹ˆλ‹€. ν”„λ‘œμ„ΈμŠ€μ˜ μœ νš¨μ„±μ„ κ²€μ‚¬ν•˜λ €λ©΄ 전체 Octopart URL 끝점(URL λ§€κ°œλ³€μˆ˜λ‘œ ν¬ν•¨λœ apikey 포함)이 ν•„μš”ν•œ 것 κ°™μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ PartKeepr μžμ²΄λŠ” λŒ€μ²΄λ₯Ό μœ„ν•΄ λŸ°νƒ€μž„μ— μ§€μ •λœ λ…λ¦½ν˜• apikey λ¬Έμžμ—΄λ§Œ μ›ν•©λ‹ˆλ‹€. μ΄λŠ” API의 URL이 /src/PartKeepr/OctoPartBundle/Services/OctoPartService.php의 const OCTOPART_ENDPOINT에 μ§€μ •λ˜μ–΄ 있기 λ•Œλ¬Έμ— μ˜λ―Έκ°€ μžˆμŠ΅λ‹ˆλ‹€.

이에 λŒ€ν•œ ν•΄κ²° 방법(적어도 당뢄간은 μ‚¬μš©)은 μ„€μ • ν”„λ‘œμ„ΈμŠ€λ₯Ό μœ„ν•΄ parameters.php에 전체 Octopart API μ—”λ“œν¬μΈνŠΈ(API ν‚€κ°€ URL λ§€κ°œλ³€μˆ˜λ‘œ 포함됨)λ₯Ό λ‚¨κ²¨λ‘λŠ” κ²ƒμž…λ‹ˆλ‹€. Octopart 지원이 ν™œμ„±ν™”λ˜μ–΄ μžˆμŒμ„ PartKeepr에 ν™•μ‹ μ‹œν‚€κΈ° μœ„ν•΄ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œν•˜μ‹­μ‹œμ˜€. 그런 λ‹€μŒ apiKeyλ₯Ό λ‚΄ Octopart API ν‚€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄μ— ν• λ‹Ήν•˜μ—¬ /src/PartKeepr/OctoPartBundle/Services/OctoPartService.php νŒŒμΌμ„ μˆ˜μ •ν–ˆμŠ΅λ‹ˆλ‹€(μ•„λž˜ μ°Έμ‘°).

public function __construct($apiKey) { $this->apiKey = "xxxxxxxx"; }

이에 λŒ€ν•œ μˆ˜μ •μ€ μ›Ή/μ„€μ • μœ ν‹Έλ¦¬ν‹°μ—μ„œ API ν‚€μ˜ μœ νš¨μ„± 검사λ₯Ό μˆ˜μ •ν•˜λŠ” 것이라고 μƒκ°ν•˜μ§€λ§Œ ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‚΄κ°€ λ­”κ°€λ₯Ό 잘λͺ» μ΄ν•΄ν–ˆκ±°λ‚˜ 이 ν”„λ‘œμ„ΈμŠ€κ°€ μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”μ§€ μ‚¬κ³Όλ“œλ¦½λ‹ˆλ‹€.

건배!

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

μ•ˆλ…•ν•˜μ„Έμš”!
Octopart 톡합에 λ¬Έμ œκ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ‚΄ API ν‚€λ₯Ό php λ§€κ°œλ³€μˆ˜μ— μ‚½μž…ν•˜κ³  setupaλ₯Ό λ‹€μ‹œ μ‹€ν–‰ν–ˆμ§€λ§Œ Octopart 검색 λ„μš©μ΄ μž‘λ™ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ λ‚΄κ°€ @tracklogic의 쑰언을 folowed μΊμ‹œλ₯Ό delted :
sudo rm -rf μ•±/μΊμ‹œ/*
그런 λ‹€μŒ 섀정을 λ‹€μ‹œ μ‹€ν–‰ν–ˆκ³  이제 λͺ¨λ“  것이 μž‘λ™ν•©λ‹ˆλ‹€!

λͺ¨λ“  11 λŒ“κΈ€

μ—¬λŸ¬ μ‚¬λžŒμ΄ OctoPart 톡합을 섀정함에 따라 κ΅¬ν˜„μ΄ 잘λͺ»λ˜μ—ˆλ‹€κ³  μƒκ°ν•˜μ§€ μ•Šκ³  API ν‚€κ°€ 잘λͺ»λ˜μ—ˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

λ¬Έμ œκ°€ 뭔지 μ•Œ 것 κ°™μ•„μš”.

μ„€μΉ˜ ν”„λ‘œκ·Έλž¨μ€ OctoPart API ν‚€λ₯Ό ν™•μΈν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ ν‚€ 자체 λŒ€μ‹  전체 OctoPart URIλ₯Ό μž…λ ₯ν•΄μ•Ό ν•˜λ©°, 그러면 데이터 검색 였λ₯˜κ°€ λ°œμƒν•œλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€.

Invalid Authentication Key 의 핡심 경우 ν‘œμ‹œ app/authkey.php μž…λ ₯ ν•œ 것과 λ™μΌν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

Octopartλ₯Ό μ„€μΉ˜ν•˜λŠ” 데에도 λ¬Έμ œκ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
λ‚΄κ°€ ν•œ 것은 μ„€μ • ν”„λ‘œμ„ΈμŠ€λ₯Ό λ‹€μ‹œ μ‹€ν–‰ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€(API ν‚€κ°€ μ €μž₯된 ν›„). 그런 λ‹€μŒ Octopart 검색이 μ˜λ„ν•œ λŒ€λ‘œ μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” 이것을 전에 ... μΊμ‹œ 디렉토리 μ–΄λ”˜κ°€μ— OctoPart ν‚€ (λ˜λŠ” κ·Έκ²ƒμ˜ λΆ€μ‘±)λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€ - 방금 μΊμ‹œ 폴더λ₯Ό μ‚­μ œν•˜κ³  PartKeepr을 μƒˆλ‘œ κ³ μ³€κ³  이제 OctoPart ν‚€λ₯Ό μ§€μ •ν–ˆμŒμ„ μ•Œμ•˜μŠ΅λ‹ˆλ‹€ - λΉ„νŠΈ λ‚΄κ°€ κ°€μ‘Œμ„ λ•Œ λ‚˜λŠ” parameters.php에 ν•˜λ‚˜λ₯Ό μ§€μ •ν•˜μ§€ μ•Šμ•˜λ‹€κ³  λ§ν•˜λ©΄μ„œ μž μ‹œ λ™μ•ˆ 머리λ₯Ό κΈμ μ˜€μŠ΅λ‹ˆλ‹€!

@WickedAx μΆ”κ°€ ν”Όλ“œλ°±μ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

ν”Όλ“œλ°± μ—†μŒ, μ’…λ£Œ

였랜 κΈ°κ°„ λ™μ•ˆ ν”Όλ“œλ°±μ΄ μ œκ³΅λ˜μ§€ μ•Šμ•„ λ¬Έμ œκ°€ μ’…λ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μΆ”κ°€ 정보가 있으면 μ–Έμ œλ“ μ§€ λ‹€μ‹œ μ—¬μ‹­μ‹œμ˜€.

μ•ˆλ…•ν•˜μ„Έμš”!
Octopart 톡합에 λ¬Έμ œκ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ‚΄ API ν‚€λ₯Ό php λ§€κ°œλ³€μˆ˜μ— μ‚½μž…ν•˜κ³  setupaλ₯Ό λ‹€μ‹œ μ‹€ν–‰ν–ˆμ§€λ§Œ Octopart 검색 λ„μš©μ΄ μž‘λ™ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ λ‚΄κ°€ @tracklogic의 쑰언을 folowed μΊμ‹œλ₯Ό delted :
sudo rm -rf μ•±/μΊμ‹œ/*
그런 λ‹€μŒ 섀정을 λ‹€μ‹œ μ‹€ν–‰ν–ˆκ³  이제 λͺ¨λ“  것이 μž‘λ™ν•©λ‹ˆλ‹€!

λ™μΌν•œ 문제, μ–ΈκΈ‰ν•œ λŒ€λ‘œ μΊμ‹œλ₯Ό μ‚­μ œν•˜λ©΄ 이미 νŠΈλ¦­μ„ μˆ˜ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.

μΊμ‹œλ₯Ό μ‚­μ œν•˜κ³  섀정을 λ‹€μ‹œ μ‹€ν–‰ν•˜μ—¬ μœ„μ˜ νŠΈλ¦­μ„ μ‹œλ„ν–ˆμŠ΅λ‹ˆλ‹€.
λ‚΄ λ¬Έμ œλŠ” λ‚΄ octopart API 킀에 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. Octopartμ—λŠ” λ‹€μŒκ³Ό 같은 ν…μŠ€νŠΈ μ˜†μ— API ν‚€κ°€ λ‚˜μ—΄λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

Octopart API ν‚€ μš”μ²­μ„ κ²€ν†  μ€‘μž…λ‹ˆλ‹€.

λΉ„ν™œμ„± API ν‚€λ₯Ό λ°œν–‰ν•˜λŠ” 것이 μ΄μƒν•˜κ²Œ λŠκ»΄μ§‘λ‹ˆλ‹€. λ°”λΌκ±΄λŒ€ 이것이 μ œκ°€ κ²ͺκ³  μžˆλŠ” λ¬Έμ œμž…λ‹ˆλ‹€.
API 호좜이 μ‹€νŒ¨ν•œ 이유λ₯Ό μ•Œλ €μ£ΌλŠ” λͺ‡ 가지 κΈ°μˆ μ΄λ‚˜ 더 λ‚˜μ€ 였λ₯˜ λ©”μ‹œμ§€κ°€ 있으면 쒋을 κ²ƒμž…λ‹ˆλ‹€.

μ•„νŒŒμΉ˜ 둜그 μ΄μ™Έμ˜ λ‹€λ₯Έ 둜그 νŒŒμΌμ΄λ‚˜ 디버깅을 μΌœλŠ” 방법이 μžˆμŠ΅λ‹ˆκΉŒ?

@lhovo λ˜ν•œ 질문이 μžˆλŠ” 경우 [email protected] 에 문의

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰